C++类的派生和继承
C++类的派生和继承4.15这道题调用的顺序是怎么看的?最后的4个数又是怎么弄出来的?要详细分析...
C++类的派生和继承4.15这道题调用的顺序是怎么看的?最后的4个数又是怎么弄出来的?要详细分析
展开
1个回答
展开全部
1、类在实例化前,不会进行构造。
2、类的构造按照继承的先后次序再到子对象,而非构造表达式的顺序。
3、综上所述,调用情况是:
因为class A:public B2,public B1
所以先有B2带1参数的构造函数执行,再有B1带1参数的构造函数执行,接着才到表达式的顺序的B3带1参数的构造函数执行,最后到A带1参数的构造函数执行,完成构造函数。
----则有了答案中的前4行。
后面4个数字是通过aa.print()调用,
因为print()在B1,B2中均存在,在多重继承下会导致出错,所有给出了显式作用域。
先调用B1的print(),再调用B2的print(),然后输出流输出a,和B3中的getb3()
----则有了答案中的后3行(最后的4个数字)
P.S.其实程序在执行过程中,还运行了默认构造函数,但是因为没有为默认构造函数安排工作,所以并没有实际输出。有兴趣可以自己添加来看看。
2、类的构造按照继承的先后次序再到子对象,而非构造表达式的顺序。
3、综上所述,调用情况是:
因为class A:public B2,public B1
所以先有B2带1参数的构造函数执行,再有B1带1参数的构造函数执行,接着才到表达式的顺序的B3带1参数的构造函数执行,最后到A带1参数的构造函数执行,完成构造函数。
----则有了答案中的前4行。
后面4个数字是通过aa.print()调用,
因为print()在B1,B2中均存在,在多重继承下会导致出错,所有给出了显式作用域。
先调用B1的print(),再调用B2的print(),然后输出流输出a,和B3中的getb3()
----则有了答案中的后3行(最后的4个数字)
P.S.其实程序在执行过程中,还运行了默认构造函数,但是因为没有为默认构造函数安排工作,所以并没有实际输出。有兴趣可以自己添加来看看。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询