含有对象的拷贝构造函数及其初始化列表
运行时系统会有:
运行时系统会有:
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; } 可能是编译器的原因吧,我这个可以呀 运行结果是正确的
举报