C++ 標準について質問があります。
ユーザー定義のコピー コンストラクターと代入演算子を持つ基本クラスがあるとします。派生クラスは、コンパイラによって生成された暗黙的なクラスを使用します。
派生クラスのコピー/割り当ては、ユーザー定義のコピー コンストラクター/割り当て演算子を呼び出しますか? または、基本クラスを呼び出すユーザー定義バージョンを実装する必要がありますか?
ご協力ありがとうございました。
C++ 標準について質問があります。
ユーザー定義のコピー コンストラクターと代入演算子を持つ基本クラスがあるとします。派生クラスは、コンパイラによって生成された暗黙的なクラスを使用します。
派生クラスのコピー/割り当ては、ユーザー定義のコピー コンストラクター/割り当て演算子を呼び出しますか? または、基本クラスを呼び出すユーザー定義バージョンを実装する必要がありますか?
ご協力ありがとうございました。
派生クラスがコピー コンストラクターを宣言せず、暗黙的なコンストラクターが宣言される場合 (12.8/4「クラス オブジェクトのコピー」) - 基本クラスにユーザーが宣言し、定義したコピー コンストラクターがある場合でも。この場合、基本クラスにユーザー定義のコピー コンストラクターがある場合、その基本クラスのサブオブジェクトは、そのユーザー定義のコピー ctor (12.8/8) を使用してコピーされます。
コピー代入演算子 (12.8/10 および 12.8.13) についても同様です。
したがって、派生クラスが「独自のもの」に対してユーザー定義のコピー ctor またはコピー代入演算子を必要としない場合、基本クラスを呼び出すユーザー定義バージョンを必ずしも実装する必要はありません。ただし、派生クラスが独自のコピー ctor/コピー代入演算子を宣言および定義する場合、それらのユーザー定義の実装は、基本クラスのサブオブジェクトに関する限り、正しいことを行う責任があります。コンパイラは自動的に.
派生クラスに明示的に定義された演算子関数がある場合のみ。それ以外の場合は、親クラスの op 関数が呼び出されます。それ以外の場合は、暗黙的な C++ が呼び出されます。