- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
深度探索c对象模型
深度探索c++对象模型
第一章:关于对象
1. c++没有什么天生的比c庞大和迟缓。加上封装后的布局成本(layout costs for adding encapsulation)以及额外存取时间主要由virtual引起
1.1 virtual function 机制,用以支持一个有效率的”执行期绑定”
1.2 virtual base class 机制,用以实现多次出现在继承体系中的base class有一个单一而被共享的实体
2. c++对象模型(c++ object model) 相比简单对象模型和表格驱动对象模型的优势和坏处。其主要坏处是让编译时间来替换执行时间,是可取的
2.1 每个class都有相应的virtual table来存储virtual function指针
2.2 每个class object都被隐式的添加了一个vptr指向class的virtual table,用于RTTI的type_info object也被关联进virtual table中
3. 关键词的差异struct和class,策略性正确的struct
?????? 3.1 用于c的struct中的伎俩(如当struct当作数组用)未必可行,要视编译器对protected和private定义前后位置
?????? 3.2 c struct在c++中的一个合理用途就是在传递一个class object的部分(或全部)到一个c函数中去时,使用struct组合于class可以有效的解决
4. 对象的差异,ADT等于abstract data type model,觉得可以称之为基于对象以区别面向对象, OO等于object-oriented module
?????? 4.1 ADT (又称OB)和OO是很不一样的, 只有OO中virtual才能体现出威力。两者互用是危险的,使用OB来表达OO,容易造成数据被截切(sliced)
?????? 4.2 体现OO的唯一方法是通过带有virtual function的(指针)对象。除此之外,所有的信息都可以在编译期决定而非运行期
5. 一个class object需要多少内存?要考虑的是一下三个方面
?????? 5.1 其nonstatic data members的总和大小
?????? 5.2 加上任何由于alignment的需要而填补上去的空间
?????? 5.3 加上为了支持virtual而由内部产生的任何额外负担(overhead)
注:我想带有virtual function的OB对于虚函数的调用也是由编译期决定的,而非运行期。这使得inline virtual function是有效的(见书第一章最后页)。*** C++是一门相当混杂的面向对象语言。Stl类库的存在是OB的特性最好解释(除所有的stream类除外)。OO部分都要靠指针和引用来体现,但是指向的实体肯定和对象在何种内存中无关(栈、堆)。
第二章 构造函数语意学
6.??译器并不是总是合成default constructor (同理copy constructor, assignment),只有在编译器需要的时候才会合成构造函数等。Nontrivial default constructor就是编译器所需要才合成出来的函数。
?????? 6.1 带有default constructor的member class object
?????? 6.2 带有default constructor的base class
?????? 6.3 带有一个virtual function的class
?????? 6.4 带有一个virtual base class的class
不在上述4个中的而又没有声明任何constructor的class,意味着它们拥有的是implicit trivial default constructors,实际上并不会被合成出来。
7. copy constructor的构建操作
?????? 7.1 default memberwise initialization, 一个良好的编译器可以为大部分class objects产生bitwise copies,因为它们有bitwise copy semantics。
?????? 7.2 bitwise copy semantics(位逐次拷贝)是指声明展现了 default copy semantics,因而编译器不需要合成拷贝构造函数出来
8. 不要bitwise copy semantics的条件
?????? 8.1 当class内含一个member object而后者的class声明了一个copy constructor时
?????? 8
原创力文档


文档评论(0)