Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;继承的复制构造函数调用?_C++_Constructor_Copy_Copy Constructor - Fatal编程技术网

C++ C++;继承的复制构造函数调用?

C++ C++;继承的复制构造函数调用?,c++,constructor,copy,copy-constructor,C++,Constructor,Copy,Copy Constructor,我有从类A派生的类B。我调用复制构造函数,我为类B的对象实现了自己。我也为类A实现了自己的构造函数 当我调用类B的复制构造函数时,是否自动调用了该复制构造函数?或者怎么做?这是好办法吗 A::A(A* a) { B(a); // copy stuff } 谢谢 您可以使用构造函数初始化列表执行此操作,该列表如下所示: B::B(const B& b) : A(b) { // copy stuff } 我修改了很多语法,因为您的代码没有显示复制构造函数,并且与您

我有从类A派生的类B。我调用复制构造函数,我为类B的对象实现了自己。我也为类A实现了自己的构造函数

当我调用类B的复制构造函数时,是否自动调用了该复制构造函数?或者怎么做?这是好办法吗

A::A(A* a)
{
    B(a);
    // copy stuff
}

谢谢

您可以使用构造函数初始化列表执行此操作,该列表如下所示:

B::B(const B& b) : A(b)
{
    // copy stuff
}
我修改了很多语法,因为您的代码没有显示复制构造函数,并且与您的描述不一致


不要忘记,如果您自己实现复制构造函数,则应遵循。

复制构造函数具有以下签名:

A(const A& other)  //preferred 

您的是一个转换构造函数。除此之外,您需要显式调用基类的复制构造函数,否则将调用默认构造函数:

B(const B& other) { }
相当于

B(const B& other) : A() { }
i、 e.不会自动调用类A中的复制构造函数。你需要:

B(const B& other) : A(other) { }

如果编写C++11(哪一个应该已经在编写),这不是一个复制构造函数……或者五条规则。
B(const B& other) : A(other) { }