クラス 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
}
コードにコピー コンストラクターが表示されておらず、説明と一致しなかったため、構文をかなり変更しました。
コピー コンストラクターを自分で実装する場合は、3 つのルールに従う必要があることを忘れないでください。
コピー コンストラクターには次のシグネチャがあります。
A(const A& other) //preferred
また
A(A& other)
あなたのものは変換コンストラクタです。それはさておき、基本クラスのコピー コンストラクターを明示的に呼び出す必要があります。そうしないと、デフォルトのコンストラクターが呼び出されます。
B(const B& other) { }
と同等です
B(const B& other) : A() { }
つまり、クラス A のコピー コンストラクターは自動的に呼び出されません。必要なもの:
B(const B& other) : A(other) { }