研讨C 中struct与Class的区别
创始人
2024-06-08 12:21:18
0

很多人对于C++中struct与Class的区别不是很了解,认为在C++中struct与Class可以说是没有区别,但是又可以说是很大区别。希望对大家能有所帮助。

因为C++要向下兼容C。所以C具有的东西,那么在C++里也具有。所以谈struct应该是从C谈起。struct在C中:struct是一种自定义的数据类型。既然是一种数据类型那么就肯定不能定义函数。C是面向过程的,面向对象的东西它自然也不具有。struct在C++中;C++是面向对象的。根据对象的思想,struct应该是等价于CLass(C是没有Class这个东西的)。这里我们又引出了一个很大的话题,面向过程和面向对象的区别。这里我们只选其中很小的一部分来说。

面向过程认为,数据和数据的操作是分开的。(当然面向过程也可以刻意的实现把数据和数据的操作集合到一起)

面向对象认为,数据和数据的操作是一个整体,不应该分开的。

这样面向对象就和面向过程有了很大的冲突。这个冲突其实引发了struct的C和C++的差异性。C++中struct是可以包含函数的,可以拥有构造函数,析构函数同样拥有继承等能力。这个时候。。很多人就会疑惑?那struct和CLASS不就一样了吗?对struct和class的确差别不大。从使用上差别不大。使用上的差别唯一的就是默认访问类型不一样struct默认私有,class默认公有。肯定就有朋友会问,平常我们都不会依赖于默认啦,不同的编译器可能默认方式都不一样的。照这个思维不就是完全没区别了。对我说的很大区别,其实针对的是思想上并非使用上。

***:struct是继承于C但又要适合于面向对象。所以struct是丢也不是,留下又多余的尴尬局面。

第二:C++中struct已经被扩展,已经不再是C时代的struct

那么***的思想差别是啥呢?我也说不清楚。思想的东西我觉得,是要靠感悟的,可能从我嘴来说出来的思想,在你眼里可能是狗屁不通,甚至是一堆臭鸡蛋。所以下面我说一个我认为的C++中struct思想。

在面向对象横行的时代。相信大家都对几个面向对象词语有很深的认识,对象,类,接口,继承等等。

但是大家留心会发现,C++里面没有“接口”这个东西。说起接口这个东西,就不能不说JAVA了,在JAVA里是不允许多继承的,但是能实现继承多个接口。但是C++却是允许实现多继承,那么如果C++里出现接口这个东西,***的结果也会变成多余。但是接口这个思想在面向对象里可以说是得到了高度的发展。甚至形成了面向方面编程AOP(其实就是针对接口编程的一种深化)。

所以我觉得“接口”其实已经在面向对象里形成了一种文化。但是作为编程界翘楚的C++却没有“接口”这样东西。人的思维是强大的,例如MS的做法就是将struct当成了接口来使用。所以我觉得C++中的struct和class区别不是在于使用,不在于语法糖,而是在于思想,在于构架约定等方面。

【编辑推荐】

  1. 关于new和delete 一些不得不说的事
  2. 《Java编程思想》作者:C++不垃圾,只是Java很傲慢
  3. Java与C++语言在作用域上的差异浅析
  4. C/C++使用多种方法获取文件大小代码
  5. C++类成员函数的重载、覆盖与隐藏

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...