首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在程序中调用这个复制构造函数?

为什么在程序中调用这个复制构造函数?
EN

Stack Overflow用户
提问于 2013-01-01 23:14:11
回答 3查看 157关注 0票数 0
代码语言:javascript
复制
#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");
}

运行结果如下:

代码语言:javascript
复制
$ ./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的一部分,为什么要调用它来处理这个复制构造函数呢?谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-01 23:21:39

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

票数 7
EN

Stack Overflow用户

发布于 2013-01-01 23:22:26

调用复制构造函数

  • 实例化一个对象并使用另一个对象中的值对其进行初始化时或
  • 将对象作为参数传递给函数或

  • 通过

函数中的值返回对象

composite类的默认复制构造函数将调用其成员的复制构造函数,这就是打印withCC(withCC&)的原因。

票数 2
EN

Stack Overflow用户

发布于 2013-01-01 23:35:06

语句复合c2 = c;将尝试通过复制构造函数复制对象,但类复合没有用户定义的复制构造函数,因此在您的情况下将使用编译器的默认复制构造函数。并且您还希望通过创建复合来构造WOCC对象,因此,对于WOCC构造,将调用用户定义的with cc的复制构造函数

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14111563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档