gpt4 book ai didi

c++ - 为什么在程序中调用这个拷贝构造函数?

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

#include <iostream>
#include <string.h>

using namespace std;

class withCC
{
public:
withCC() {}
withCC(const withCC&) {
cout<<"withCC(withCC&)"<<endl;
}
};

class woCC
{
enum {bsz = 100};
char buf[bsz];
public:
woCC(const char* msg = 0) {
memset(buf, 0, bsz);
if(msg) strncpy(buf, msg, bsz);
}
void print(const char* msg = 0)const {
if(msg) cout<<msg<<":";
cout<<buf<<endl;
}
};

class composite
{
withCC WITHCC;
woCC WOCC;
public:
composite() : WOCC("composite()") {}
void print(const char* msg = 0) {
cout<<"in composite:"<<endl;
WOCC.print(msg);
}
};

int main()
{
composite c;
c.print("contents of c");
cout<<"calling composite copy-constructor"<<endl;
composite c2 = c;
c2.print("contents of c2");
}

运行结果如下:

$ ./a.out 
in composite:
contents of c:composite()
calling composite copy-constructor
withCC(withCC&)
in composite:
contents of c2:composite()

而且我不明白为什么 withCC(withCC&) 作为输出的一部分给出。我猜 composite c2 = c; 会导致复制构造函数被执行。但是如下所示,WITHCCclass composite 的一部分,为什么会调用它来处理这个复制构造函数?谢谢!

最佳答案

复制构造函数 withCC(withCC&) 被调用是因为 composite 的默认复制构造函数将调用其成员数据的所有复制构造函数。由于您有一个 withCC 对象作为 composite 类中的成员数据,因此将调用复制构造函数 withCC(withCC&)

关于c++ - 为什么在程序中调用这个拷贝构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14111563/

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