初期化リストと保護されたメンバーの初期化
C を使用したオブジェクト指向プログラミングでは、クラスが親クラスから継承するのが一般的です。そしてその機能を拡張します。ただし、次のような疑問が生じます: 子クラスのコンストラクターの初期化リストを使用して、親クラスで保護されたものとして宣言されたデータ メンバーを初期化できますか?
これを実現しようとすると、次のようなコードが使用される可能性があります。以下:
<code class="cpp">class Parent { protected: std::string something; }; class Child : public Parent { private: Child() : something("Hello, World!") {} };</code>
ただし、この試行はコンパイラ エラーとなり、Child クラスに何かという名前のフィールドがないことが示されます。これは、データ メンバーの何かが親クラスで保護されたものとして宣言されているためです。
子クラスの初期化リストを使用して保護されたメンバーを初期化するには、別のアプローチが必要です。必要な初期化を備えたコンストラクターを親クラスに追加すると、このコンストラクターを子クラスのコンストラクターから呼び出すことができます。これは、コンストラクターの転送によって実現できます。
<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 サイトの他の関連記事を参照してください。