オブジェクト指向プログラミングでは、継承によりクラスが基本クラスのプロパティとメソッドを継承できます。この強力な機能により、コードの再利用と保守性が向上します。ただし、継承されたクラスでコンストラクターと代入演算子を処理するのは難しい場合があります。
一連のコンストラクターと代入演算子を持つクラス B を考えてみましょう。目標は、foo() をオーバーライドし、B のコンストラクターと代入演算子を保持する継承クラス D を作成することです。
これを実現する 1 つの方法は、コンストラクターと代入演算子を明示的に呼び出すことです。これには、D のインスタンスの作成時に適切な基本クラス コンストラクターを手動で呼び出し、Base::operator=() を使用して代入演算子に値を割り当てることが含まれます。
<code class="cpp">class Base { // ... public: Base(const Base&) { /*...*/ } Base& operator=(const Base&) { /*...*/ } }; class Derived : public Base { int additional_; public: Derived(const Derived& d) : Base(d) // dispatch to base copy constructor , additional_(d.additional_) { } Derived& operator=(const Derived& d) { Base::operator=(d); additional_ = d.additional_; return *this; } };</code>
興味深いことに、コンストラクターや代入演算子を明示的に定義しなくても、コンパイラーがそれらを自動的に生成する場合があります。これは、直接的な継承と最小限のカスタマイズを備えたクラスの場合です。
<code class="cpp">class ImplicitBase { int value_; // No operator=() defined }; class Derived : public ImplicitBase { const char* name_; public: Derived& operator=(const Derived& d) { ImplicitBase::operator=(d); // Call compiler generated operator= name_ = strdup(d.name_); return *this; } }; </code>
したがって、コンストラクターと代入演算子の包括的なセットを提供する基本クラスから継承する場合、それらをこれらの関数に追加の機能が必要ない限り、派生クラスを書き直す必要はありません。
以上がC の派生クラスで基本クラスのコンストラクターと代入演算子を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。