求一道C++题详细解答!!多谢!

 我来答
百度网友7d16e87
2013-12-31 · TA获得超过281个赞
知道小有建树答主
回答量:383
采纳率:100%
帮助的人:256万
展开全部
这是一道关于“初始化列表的成员初始化顺序“的问题。C++初始化类成员时,是按照声明的顺序初始化的,而不是按照出现在初始化列表中的顺序。在main函数中执行到Derived objD(1,2,3,4);此句时会开始初始化构造函数,以下操作均围绕这一句展开。首先看类Derived,它继承自两个父类,Base2和Base1,注意这个继承顺序,先写的是Base2,后写的Base1。那么也就是说在执行Derived(int a,int b,int c,int d):mem1(a),mem2(b),Base1(c),Base2(d),Base(a)时会先初始化Base2(d)然后在执行Base1(c),所以就产生了4,3.那么43前面的1就是执行基类Base(a)产生的,经过测试Base(a)无论在什么位置都会先执行。143的已经弄明白了。后面的就更好弄了。在类Derived中的私有变量中声明的顺序为先mem2,后mem1,那么先执行mem2,后执行mem1。mem2与mem1的构造属于”复制构造函数“,也就是说必须要Base2和Base1存在才能完成构造过程,所以就要先构造Base2,产生02,然后构造Base1,产生01,最后又输出了b,2.最终输出顺序就是14302012。

若有不对的地方请大家提出来。谢谢。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式