子クラスの初期化リストで親クラスの保護されたデータ メンバーを初期化する
オブジェクト指向プログラミングでは、派生クラスは基本クラスから機能を継承できます。 。よく生じる質問の 1 つは、子クラスのコンストラクターの初期化リストを使用して、親クラスの保護されたデータ メンバーを初期化できるかどうかです。
次のコード例を考えてみましょう。
<code class="cpp">class Parent { protected: std::string something; }; class Child : public Parent { private: Child() : something("Hello, World!") { } };</code>
Whenこのコードをコンパイルしようとすると、コンパイラは、「Child」クラスに「something」という名前のデータ メンバーが含まれていないことを示すエラーをスローします。これは、初期化リストでは子クラス自体内のデータ メンバーの初期化のみが許可されているためです。
必要な機能を実現するには、必要な初期値を受け入れて転送するコンストラクターを親クラスに追加する必要があります。基本クラスのデータメンバーに。例:
<code class="cpp">class Parent { protected: Parent(const std::string& something) : something(something) {} std::string something; }; class Child : public Parent { private: Child() : Parent("Hello, World!") { } };</code>
この場合、「親」クラスのコンストラクターは、子クラスの初期化リストから呼び出されたときに、「何か」の保護されたデータ メンバーを初期化します。したがって、子クラスは、初期化された「何か」のデータ メンバーを親クラスから継承します。
以上が保護された親クラスのメンバーは、子クラスの初期化リストを介して初期化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。