オブジェクト指向プログラミングでは、派生クラスのコンストラクター内で基本クラスのメンバー変数を初期化することが一般的なタスクです。ただし、特定のシナリオではこの初期化が妨げられる場合があります。そのようなシナリオの 1 つと推奨される解決策を見てみましょう。
次のコード スニペットを考えてみましょう:
class A { public: int a, b; }; class B : public A { B() : A(), a(0), b(0) { } };
ここで、プログラムは、基本クラス A のメンバー変数 a と b を初期化しようとします。派生クラス B のコンストラクター。ただし、このアプローチはコンパイル エラーで失敗します。
このエラーの理由は、a と b が次のとおりであるという事実にあります。 B のメンバーではありません。これらは基本クラス A のメンバーです。したがって、A のコンストラクターのみがそれらを初期化する権限を持ちます。
派生クラスのコンストラクターで a と b を直接初期化する代わりに、a と b をより効率的に初期化できます。解決策は、それらを基本クラスの保護されたメンバーとして宣言し、基本クラス内のコンストラクターを初期化に利用することです。このアプローチにより、派生クラスは継承を通じてこれらの変数にアクセスし、初期化できるようになります。
この改善されたアプローチを示す改訂されたコード スニペットを次に示します。
class A { protected: A(int a, int b) : a(a), b(b) {} // Accessible to derived classes // Change "protected" to "public" to allow others to instantiate A. private: int a, b; // Keep these variables private in A }; class B : public A { public: B() : A(0, 0) // Calls A's constructor, initializing a and b in A to 0. { } };
この改訂されたコードでは、ベースのコンストラクターがクラス A は 2 つの整数引数を受け取り、それに応じてメンバー変数 a と b を初期化します。派生クラス B は、A の保護されたコンストラクターを継承し、それを独自のコンストラクター内で呼び出して、a と b をデフォルト値 0 で初期化します。
このアプローチにより、カプセル化を維持しながらメンバー変数の適切な初期化が保証され、オブジェクト指向プログラミングの原則。
以上が派生クラス コンストラクターから基本クラスのメンバー変数を適切に初期化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。