c++ 请帮忙解释下运行结果顺序问题,谢谢 (为什么输出3 2 4 1 这个顺序,我基础不好,马上考试啦着急)

[复制链接]
查看11 | 回复4 | 2011-10-16 16:48:42 | 显示全部楼层 |阅读模式
首先构造A之前,先构造A的基类,按照class A:public Base1,public Base2 先构造Base1,然后再构造Base2,然后初始化数据成员,按照声明顺序Base1 b1;Base2 b2;先初始化b1,调用Base1的构造函数,然后Base2. 所以 A(int a,int b,int c,int d):Base2(b),Base1(c),b2(a),b1(d) 这句后面的顺序不管怎么变化 结果都是不会变的...
回复

使用道具 举报

千问 | 2011-10-16 16:48:42 | 显示全部楼层
这个 构造派生类的对象 的时候会调用 父类的构造函数;也就是说 先构造直接父类然后构造子类;先继承谁 先构造谁所以 调用基类Base1的构造函数:3 在调用基类Base2的构造函数:2的前面还有一个知识点就是 :b2(a)这种的 要比 {....}的先执行 所以 这里先执行 Base1 b1;和Base 2 b2;然后...
回复

使用道具 举报

千问 | 2011-10-16 16:48:42 | 显示全部楼层
你好,首先要初始化继承自基类的成员变量,而这个顺序是按照类定义中的继承顺序来的:class A:public Base1,public Base2{所以先初始化 c 然后是 b;然后初始化A类中的成员变量 b1 b2,按定义的顺序初始化 所以是 d 然后是 a...
回复

使用道具 举报

千问 | 2011-10-16 16:48:42 | 显示全部楼层
你这个程序利用的是函数的递归调用,首先程序从void main()开始执行,运行{A obj(1,2,3,4);}时就开始调用classA并开始执行class A:public Base1,public Base2{public:
A(int a,int b,int c,int d):Base2(b),Base1(c),b2(a),b1(d...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行