struct 由c语言引入。在c语言中,是定义结构化数据的标准选择。c++
c++ 同时支持struct 和 class. 缘由之一是c++ 是 c 的超集,涵盖c 已支持的语言要素,将更好的支持向下兼容(原来可以工做的c 源程序移植到c++,能够支付极少甚至0代价)网络
实际上,c++ 的class已经对struct 进行了彻底的覆盖,便是说,原来用struct 实现的结构体,彻底能够用class 代替。框架
那么问题出来了,一个新项目, 何时应该使用struct, 一样的东西,用struct实现或者用class实现,性能上有没有区别。模块化
struct 和 class 实际在C++ 中没有什么区别。工具
struct 仍然能够继承自另外一个struct (不多看到有人这么干)。性能
struct 默认的字段类型是public, 默认的继承方式也是public, 而class 的默认字段类型是private, 默认继承方式也是private。设计
未见任何文档有描述说struct 比 class 更快。我的感受既然struct 和 class 在实现上能够互换,也就是说要支持相同的语言级基础设施和复杂度,那么就不该该存在用哪一个更快的问题(同等级别对象, 你不能拿一个有4个字段的Rect 结构体 和一个带Hashtable 的ResManager相比)3d
因为struct 和 class 的可替换性,何时用struct 和何时用class的选择就至关主观了。一般你们的直觉是一致的: struct 应该应用于POD(Plain old data)类型的对象. 用一个词来描述,他们更像是记录, 一个简单的集合,里面有几个字段, 例如 struct Color, struct Rect, struct Point 等都是咱们常见的结构。指针
而class 实际上更适合用于抽象主动的对象, 他们一般能够有复杂的继承关系(我的认为太复杂是一种做死的行为,稍后解释)。 或许有更多的方法和逻辑。对于class来说,内部数据除了理解为记录, 更有一部分是“状态”。对象
另一个struct 的好处是:
它能够很方便的序列化和反序列话,好比,直接拿到一个struct 的指针。 sizeof取得大小,直接把对象存储到文件或写入网络。固然基于某些缘由。我也不建议这么作。
顺口说一句:我其实更倾向于基于对象而反对Pure面向对象。
教课书上,为了教会人使用C++, 一般会这么举例:
好,你如今定义一个“人”,那么他的继承树应该是这样的:
有莫有,有莫有这样的。
人还有相似 说话,吃饭,骗其余人感情和身体 这些方法。
猴子就要简单些,只会叫唤,可是因为他们都继承自哺乳动物,因此他们都有继承自哺乳动物的方法 喂奶。至于植物系的,固然就没有那么高级了,可是他和哺乳动物同样,又从LivingThing 那里继承了一些东西,好比生长和死亡。固然我认可那个植物人是开玩笑的。
还有一些是拿交通工具举例的。。看起来多么优雅,代码重用性超高。
对于这种为了面向对象而面向对象的思惟方式,我只想说看到这样的代码,能够直接拖出去毙了。缘由是,稍微复杂点的项目,没人会这么干。由于继承树的深度在以指数的方式影响复杂度。有天你会发现,想实现一个SuperMan, 根本无从下手,想改变一个基类方法,不知道他最终会影响哪些类。
我赞成muduo的做者那个谁的观点:
在你要对一个代码进行修改(多是Fix bug, 也多是添加一个新的功能), 首先要作的事情,绝对不是直接撸袖子开始干代码。首先是要想出要怎么改。为了要想出一个方案,你首先要了解当前的代码,把代码理解了,就如同内存装载数据同样。优雅的代码,你只须要了解不多的相关代码(这也是提倡解耦的缘由)。因此若是是上图所示的代码。。我想问问你的脑存今年有没有升过级。
我本身比较接受Service 和 Data分开的原则,模块化比面向对象更重要,另外在基础框架稳固的前提下。基于组件的设计原则也是极其爽的,特别是游戏开发。Unity3d的引擎就是基于组件的。啥都是组件。
嗯,固然这是另外一个议题。我好像严重跑题了。
因而今年是2015年了。我上一次,最后一次更新博客是,擦 2008年离如今有7年了。
如今我回来了。
有些时候脑壳里面好多似是而非的东西,不如认真去调查,顺手再写篇log做为记录。
也欢迎任何人怒骂嘲讽。