gpt4 book ai didi

c++ - C++中的复制构造函数

转载 作者:太空宇宙 更新时间:2023-11-04 15:50:37 25 4
gpt4 key购买 nike

我有这些类(class):

首先:

 class C 
{
public:
C(const C& c):_s(c._s){}
c():_s(""){}

string _s;
}

第二个:

class C2: public C
{
public:
C2(const C2 & c2):_i(c2.i){}
C2():_i(0){}

int _i;
}

主要内容:

int main()
{
C2 c2;
C2._s="hello";
c2._i=42;
C2 c3(c2);
cout<<c3._s<<" "<<c3._i<<endl;
}

输出是 42。我的问题是,为什么输出是 42?基本构造函数总是在派生构造函数之前被调用,所以这一行:

C2 c3(c2);

应该调用 C 的复制构造函数并且应该复制“hello”,这意味着输出应该是 hello。我在这里错过了什么?

最佳答案

原因是

C2(const C2 & c2):_i(c2.i){}

不会将 _s 初始化为存储在 c2 中的值,因为除非另有说明,否则会调用基类的默认(无参数)构造函数,因此 _s 也使用其默认构造函数初始化,而不是复制构造函数。

特别是在你的情况下 C2::(const C2&) 调用 C::C() 并且调用 string::string().

您必须显式调用正确的基础构造函数:

C2(const C2 & c2) :
C( c2 ),
_i(c2.i)
{
}

关于c++ - C++中的复制构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9228834/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com