派生クラス コンストラクターでの基本クラスのメンバー変数の初期化
クラスの継承を使用する場合、基本クラスをどのように初期化するかという一般的な疑問が生じます。派生クラスのコンストラクター内のメンバー変数。最初にそうしようとすると、以下に示すように混乱が生じる可能性があります:
class A { public: int a, b; }; class B : public A { B() : A(), a(0), b(0) { } };
このコードはコンパイルに失敗し、疑問が生じます: なぜ B で a と b を初期化できないのですか?
その理由は、a と b が B のメンバーではないという事実にあります。これらは基本クラス A に属します。A だけが独自のメンバー変数を初期化できます。
One考えられる解決策は、a と b を A のパブリック メンバーにして、B が値を直接割り当てられるようにすることです。ただし、これはカプセル化の原則に違反するためお勧めできません。
代わりに、より堅牢なアプローチは、派生クラスが初期化値を指定できるようにする A でコンストラクターを定義することです。これは、コンストラクターを保護し、サブクラスにアクセスできるようにすることで実現できます。
class A { protected: A(int a, int b) : a(a), b(b) {} // Accessible to derived classes private: int a, b; // Keep variables private within A }; class B : public A { public: B() : A(0, 0) // Calls A's constructor, setting a and b to 0 within A { } };
このソリューションにより、a と b が A 内で正しく初期化され、データの整合性とカプセル化が保証されます。
以上が派生クラス コンストラクターで基本クラスのメンバー変数を適切に初期化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。