2

C++ 標準について質問があります。

ユーザー定義のコピー コンストラクターと代入演算子を持つ基本クラスがあるとします。派生クラスは、コンパイラによって生成された暗黙的なクラスを使用します。

派生クラスのコピー/割り当ては、ユーザー定義のコピー コンストラクター/割り当て演算子を呼び出しますか? または、基本クラスを呼び出すユーザー定義バージョンを実装する必要がありますか?

ご協力ありがとうございました。

4

2 に答える 2

4

派生クラスがコピー コンストラクターを宣言せず、暗黙的なコンストラクターが宣言される場合 (12.8/4「クラス オブジェクトのコピー」) - 基本クラスにユーザーが宣言し、定義したコピー コンストラクターがある場合でも。この場合、基本クラスにユーザー定義のコピー コンストラクターがある場合、その基本クラスのサブオブジェクトは、そのユーザー定義のコピー ctor (12.8/8) を使用してコピーされます。

コピー代入演算子 (12.8/10 および 12.8.13) についても同様です。

したがって、派生クラスが「独自のもの」に対してユーザー定義のコピー ctor またはコピー代入演算子を必要としない場合、基本クラスを呼び出すユーザー定義バージョンを必ずしも実装する必要はありません。ただし、派生クラスが独自のコピー ctor/コピー代入演算子を宣言および定義する場合、それらのユーザー定義の実装は、基本クラスのサブオブジェクトに関する限り、正しいことを行う責任があります。コンパイラは自動的に.

于 2010-05-06T08:04:15.220 に答える
0

派生クラスに明示的に定義された演算子関数がある場合のみ。それ以外の場合は、親クラスの op 関数が呼び出されます。それ以外の場合は、暗黙的な C++ が呼び出されます。

于 2010-05-06T07:44:27.410 に答える