构造函数、默认构造函数、合成的默认构造函数之间有什么区别和联系? 100

如题。谢谢大家!... 如题。谢谢大家! 展开
 我来答
jeyyu
2009-08-24 · TA获得超过2699个赞
知道小有建树答主
回答量:267
采纳率:0%
帮助的人:0
展开全部
C++编译器必须为未声明构造函数之class合成一个默认构造函数
第一,class 有member object(该member object有default constructor), class需要default constructor调用member object default constructor

第二,如果一个没有任何constructor的class 派生自一个"带有default constructor"的base class.那么它的default constructor会被合成出来。

第三,如果一个class申明了virtual function,,如果该类没有任何constructor,
编译器也会为它加default constructor.
(如果用户有constructor,编译器会在他的constructor中添加一些code,用来初始化vptr)

第四,一个class(没有申明任何constructor)派生自一个继承串链,其中有一个或多个virtual base classes,编译器也会合成出一个default constructor,在其中放入每一个virtual base class的执行期存取操作的的码,
(如果用户申明了constructors,编译器会在constructor中安插virtual base class执行期存取操作的的码)

上面四种分析合成出的default constructor都是nontrivial default constructors,
不在此情况之内的都trivial default constructors,它们实际上并不会被编译器合成出来

在合成的default constructors,只有base class subobjects和member class object会
被初始化,所有其它的nonstatic data member,如整数、整数指针、整数数组等等都不会被编译器初始化。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式