含有对象的拷贝构造函数及其初始化列表

运行时系统会有:


运行时系统会有:

2015-10-24
直接在你的评论下回复有字数限制,我再发一条回答好了。
你前一次的错误是缺少函数定义,根本不能编译。
这次加上base的默认构造函数后,可以编译并运行了。
但如果你只是加上base的默认构造函数,没有改别处的话,那这次的错误就在于:
Big的拷贝构造函数还是没有做任何事! 且不说它并没有拷贝a1的内容,甚至也没有初始化自己的成员变量。 这种情况下,Big的成员变量会被默认初始化:也即是int v被默认初始化为随机值;base b就调用了自己的默认构造函数,这样b.k就是0(前一次就因为没有base的默认构造函数,所以在这里编译失败)
所以第二行输出的内容最后是一个0(a2.b.k),前面那一大串就是a2.v中的随机值。
onemoo:class base
{
public:
int k;
base(int n):k(n) {}
//base(){}
};
class Big
{
public:
int v;
base b;
Big(int n=0):v(n),b(n){}
//Big(const Big &c):v(c.v),b(c.b){}
//Big(const Big &c){v=c.v;b=c.b;}//没有拷贝构造函数也可以
};
int main()
{
Big a1(5);
Big a2=a1;
cout<<a1.v<<a1.b.k<<endl;
cout<<a2.v<<a2.b.k<<endl;
return 0;
}
可能是编译器的原因吧,我这个可以呀
运行结果是正确的举报