码迷,mamicode.com
首页 > 编程语言 > 详细

Inside The C++ Object Model(二)

时间:2016-10-25 02:28:20      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:编译器   那是   没有   四种   tor   height   9.png   class   总结   

============================================================================
2-0. 关键字explicit被引入C++,提供给程序员一种方法,使他们能够制止“单一参数的constructor”被当做一个conversion运算符。


============================================================================
2-1.Default Constructor的建构操作:
“default constructor...在需要的时候被编译器产生出来”。关键字眼是“在需要的时候”,被谁需要?做什么事情? 期间的差别在于是程序的需要,还是编译器的需要。程序如果有需要,那是程序员的责任,此时并不会合成出一个default constructor。只有当编译器需要它的时候,才会合成它,并且被合成出来的constructor只执行编译器所需的行动。一个nontrivial default constructor就是“编译器所需要”的那种,必要的话会由编译器合成出来。下面讨论nontrivial default constructor的四种情况:
(1)带有“Default Constructor”的Member Class Object。

技术分享

技术分享

技术分享

技术分享

(2)“带有Default Constructor”的Base Class。

技术分享

 

(3) “带有一个Virtual Function”的Class。

技术分享

技术分享

(4) “带有一个Virtual Base Class”的Class。

技术分享

技术分享

总结:

技术分享

============================================================================
2-2. Copy Constructor的建构操作
有三种情况,会以一个object的内容作为另一个class object的初值。
(1)明确地以一个object的内容作为另一个class object的初值;
(2)当object被当作参数交给某个函数时;
(3)当函数传回一个class object时;

Default Memberwise Initialization
如果class没有提供一个explicit copy constructor时,当class object以“相同class的另一个object”作为初值时,其内部是以所谓的default memberwise initialization手法完成的,也就是把每一个內建的或派生的data member(例如一个指针或一数目组)的值,从某个object拷贝一份到另一个object身上。不过它并不会拷贝其中的member class object,而是以递归的方式施行memberwise Initialization。如下:

技术分享
Bitwise Copy Semantics(位逐次拷贝)

技术分享

 

技术分享

技术分享

技术分享

技术分享

技术分享

============================================================================
2-3. 程序转化语意学

技术分享

技术分享

============================================================================
2-4. 成员的初始化

技术分享

技术分享

技术分享

技术分享

技术分享


============================================================================

Inside The C++ Object Model(二)

标签:编译器   那是   没有   四种   tor   height   9.png   class   总结   

原文地址:http://www.cnblogs.com/yyxt/p/5995063.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!