求一道C++题详细解答!!多谢!
1个回答
展开全部
这是一道关于“初始化列表的成员初始化顺序“的问题。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。
若有不对的地方请大家提出来。谢谢。
若有不对的地方请大家提出来。谢谢。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询