我有从 A 类派生的 B 类。我调用了自己为 B 类的对象实现的复制构造函数。我还为自己实现了 A 类的构造函数。
当我为 B 类调用复制构造函数时,是否会自动调用此复制构造函数?或者如何做到这一点?这是好方法吗:
A::A(A* a)
{
B(a);
// 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
或者
A(A& other)
你的是一个转换构造函数。除此之外,您需要显式调用基类的复制构造函数,否则将调用默认构造函数:
B(const B& other) { }
相当于
B(const B& other) : A() { }
即不会自动调用来自 A 类的复制构造函数。你需要:
B(const B& other) : A(other) { }