派生クラス コンストラクターでの基本クラスのメンバー変数の初期化
オブジェクト指向プログラミングでは、クラス間に継承関係があるのが一般的です。派生クラスを構築するときは、基本クラスから継承したメンバー変数を適切に初期化することが重要です。ただし、派生クラスのコンストラクターで基本クラスのメンバーを直接初期化しようとすると、エラーが発生する可能性があります。
次のコード例を検討してください。
class A { public: int a, b; }; class B : public A { public: B() : A(), a(0), b(0) { } };
このコードをコンパイルしようとすると、次の結果が得られます。派生クラスのコンストラクターは基本クラスのメンバーを直接初期化できないため、エラーが発生します。これは、基本クラスのメンバーが派生クラスからアクセスできないためです。
この問題を解決するには、派生クラスが継承されたメンバーを初期化できるようにするコンストラクターを基本クラスに作成する必要があります。次の変更されたコードは、このアプローチを示しています。
class A { protected: A(int a, int b) : a(a), b(b) {} private: int a, b; }; class B : public A { public: B() : A(0, 0) { } };
これで、派生クラス B は、基本クラス A のコンストラクターを呼び出すことによって、継承されたメンバー a と b を初期化できます。 A のコンストラクターを保護されたものとして宣言することで、派生クラスにはアクセスできますが、継承階層の外側にある他のクラスにはアクセスできません。あるいは、A コンストラクターをパブリックとして宣言して、外部インスタンス化を許可することもできます。
このアプローチを使用すると、カプセル化を維持し、クラスの外部からプライベート変数への直接アクセスを防ぎながら、継承されたメンバーの適切な初期化を保証できます。
以上が基本クラスのメンバー変数は派生クラスのコンストラクターでどのように初期化されるべきですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。