派生クラスでの基本クラス コンストラクターと代入演算子の使用
C では、継承により派生クラスが基本クラスの特定の機能を継承できます。ただし、派生クラスが基本クラスと同じコンストラクターと代入演算子のセットを必要とする場合は、派生クラスでこれらの関数を書き直すことが必要になる場合があります。これは、特にプライベート メンバー変数へのアクセスが必要な代入演算子の場合、面倒な作業になる可能性があります。
幸いなことに、別の解決策があります。派生クラスは、基本クラスのコンストラクターと代入演算子を明示的に呼び出すことができます。この手法により、既存の実装を書き直すことなく利用できるようになります。
次のコード例を考えてみましょう:
<code class="cpp">class Base { public: Base(); Base(const string& s); Base(const Base& b) { (*this) = b; } Base& operator=(const Base & b); private: // ... (private member variables and functions) }; class Derived : public Base { public: // Override the "foo" function without modifying other aspects of the base class virtual void foo() override; };</code>
この例では、Derived は Base のコンストラクターと代入演算子を継承します。これらの関数を明示的に定義する必要はありません。代わりに、Derived オブジェクトを構築するとき、または Base オブジェクトを Derived オブジェクトに代入するときに、コンパイラは適切な基本クラス コンストラクターまたは代入演算子を自動的に呼び出します。
代入演算子にも同じ戦略を使用できます。
<code class="cpp">class Base { public: // ... (private member variables and functions) Base(const Base& b) { /* ... */ } Base& operator=(const Base& b) { /* ... */ } }; class Derived : public Base { public: int additional_; // Call the base assignment operator within the derived operator Derived& operator=(const Derived& d) { Base::operator=(d); additional_ = d.additional_; return *this; } };</code>
この手法により、派生クラスは、必要な動作をオーバーライドまたは追加するだけで、基本クラスの機能を完全に利用できるようになります。複雑な基本クラスのコンストラクターや代入演算子を書き直す必要がなくなるため、継承が簡素化されます。
以上が派生クラスは基本クラスのコンストラクターと代入演算子をどのように利用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。