派生クラス コンストラクターの基本クラス メンバー変数の初期化
オブジェクト指向プログラミングでは、継承により派生クラスがプロパティと動作を継承できるようになります。基本クラス。ただし、派生クラス コンストラクター内で基本クラスのメンバー変数を初期化すると、問題が発生する場合があります。
なぜ派生クラス コンストラクターで基本クラスのメンバー変数を初期化できないのですか?
次の例を考えてみましょう:
class A { public: int a, b; }; class B : public A { B() : A(), a(0), b(0) { } };
このコードでは、クラス B がベースを初期化しようとします。構文 A()、a(0)、b(0) を使用して、クラス メンバー変数 a および b を独自のコンストラクター内で使用します。ただし、このアプローチは間違っています。その理由は、a と b はクラス B のメンバーではなく、クラス A のメンバーであるためです。これらの変数を直接初期化できるのはクラス A だけです。
初期化のベスト プラクティス
この問題に対処するために、推奨されるアプローチがいくつかあります。
class A { public: int a, b; }; class B : public A { B() : a(0), b(0) { } };
ただし、メンバー変数をパブリックにすることは、原則に違反するためお勧めできません。カプセル化とセキュリティ。
class A { protected: A(int a, int b) : a(a), b(b) {} // Accessible to derived classes 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. { } };
このアプローチにより、派生クラスは、必要な初期値を使用して基本クラスのコンストラクターを呼び出すことで、基本クラスのメンバー変数を初期化できます。
以上が基本クラスのメンバー変数は派生クラスのコンストラクターでどのように初期化されるべきですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。