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

C++ inherited copy constructor call ?

本文关键字:函数调用 复制 继承 C++      更新时间:2023-10-16

我有从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 

A(A& other)

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

B(const B& other) { }

相当于

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

即不会自动调用来自类 A 的复制构造函数。你需要:

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