7

クラス A から派生したクラス B があります。クラス B のオブジェクトに対して自分で実装したコピー コンストラクターを呼び出します。クラス A のコンストラクターも自分で実装しました。

クラス B のコピー コンストラクターを呼び出すと、このコピー コンストラクターは自動的に呼び出されますか? またはこれを行う方法は?これは良い方法ですか:

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

ありがとう!

4

2 に答える 2

25

これは、コンストラクターの初期化リストを使用して行うことができます。これは次のようになります。

B::B(const B& b) : A(b)
{
    // copy stuff
}

コードにコピー コンストラクターが表示されておらず、説明と一致しなかったため、構文をかなり変更しました。

コピー コンストラクターを自分で実装する場合は、3 つのルールに従う必要があることを忘れないでください。

于 2012-09-28T13:00:03.503 に答える
5

コピー コンストラクターには次のシグネチャがあります。

A(const A& other)  //preferred 

また

A(A& other)

あなたのものは変換コンストラクタです。それはさておき、基本クラスのコピー コンストラクターを明示的に呼び出す必要があります。そうしないと、デフォルトのコンストラクターが呼び出されます。

B(const B& other) { }

と同等です

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

つまり、クラス A のコピー コンストラクターは自動的に呼び出されません。必要なもの:

B(const B& other) : A(other) { }
于 2012-09-28T13:03:10.803 に答える