回复 5楼 xg5699
#include<iostream>
using namespace std;
class ONE{
int c;
public:
ONE():c(0){cout<<1;}
ONE(int n):c(n){cout<<2;}
};
class TWO{
ONE one1;
ONE one2;
public:
TWO(int m):one2(m){cout<<3;}
};
int main(){
TWO t(4);
return 0;
}
我写一下这个程序运行的整个过程,帮我看下到底是哪一步有问题?
第一种过程:
由于TWO类中有子对象one1和one2,所以要先对t调用类ONE的构造函数。由于t被初始化为4,所以调用ONE带参数的构造函数,输出2.然后调用TWO的构造函数,把one2初始化为4,输出3.整个一来输出的结果是23.(这是我第一次的做题思路)
第二种过程:
由于TWO类中有子对象one1和one2,所以要先调用类ONE的构造函数,对one1和one2进行初始化。one1和one2均不带参,所以调用 ONE():c(0){cout<<1;},输出11,接下来调用TWO的构造函数,把one2初始化为4,输出3.这样结果就是113.
我上机试过了,结果确实是123.上面的程序过程错在哪里?能说一下正确的运行顺序吗?