1

基本クラスがあり、そこから派生するクラスはほとんどありません。基本クラスにコピーコンストラクターを記述していません。デフォルトのコンストラクターを使用しています。

したがって、このコードを書くと、次のようになります。

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

正常に動作しますが、次のように記述した場合:

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

派生クラスに一致する関数がない場合、エラーが発生します。

this基本クラスのポインタを派生クラスのコピーコンストラクタに渡して初期化することはできませんか?

4

3 に答える 3

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) {...}
于 2012-07-25T09:58:10.720 に答える
0

派生したコンストラクターに、基本クラスをパラメーターとして受け取るバージョンをオーバーロードします。それはうまくいくはずです。

于 2012-07-25T10:01:02.293 に答える
0

いいえ、できません。の他のサブクラスが存在する可能性がありbaseます。クラスのコピーコンストラクタがderiveを受け入れるconst base&場合は、別のサブクラスのインスタンスを渡すことができますbase。クラスのコピーコンストラクタはderive、そのようなオブジェクトをどう処理するかを知りません。

于 2012-07-25T10:01:14.313 に答える