派生类中的复制构造函数

时间:2012-07-25 09:56:01

标签: c++ copy-constructor

我有一个基类,很少有类从中派生出来。我没有在基类中编写任何复制构造函数,它使用默认的。

所以如果我写这段代码:

base* b;
b = new base(*this)

它工作正常,但如果我写这样的东西:

base* b;
b = new derive(*this) 

它给出了派生类中没有匹配函数的错误。

我不能将基类'this指针传递给它的派生类复制构造函数来初始化吗?

3 个答案:

答案 0 :(得分:3)

Derived复制构造函数将const Derived &作为参数。您不能使用const Base &作为参数。

您正在尝试:

Derived *d = new Derived();
Base *b = new Base(*d); //ok, since Derived is subclass of Base

Base *b = new Based();
Derived *d = new Derived(*b); //error, since Base in not subclass of Derived

为了从Derived构建Base,您需要自己提供这样的构造函数:

Derived(const Base &base) {...}

答案 1 :(得分:0)

使用将基类作为参数的版本重载派生的构造函数。这应该有用。

答案 2 :(得分:0)

不,你不能。可能存在base的其他子类。如果类derive的复制构造函数接受const base&,那么您可以将其传递给base的另一个子类的实例。类derive的复制构造函数不知道如何处理这样的对象。