ホームページ >バックエンド開発 >C++ >子クラスは初期化リストを通じて保護された親メンバーを初期化できますか?

子クラスは初期化リストを通じて保護された親メンバーを初期化できますか?

DDD
DDDオリジナル
2024-10-25 07:57:02786ブラウズ

Can Child Classes Initialize Protected Parent Members Through Initialization Lists?

子クラスの初期化リストで保護された親メンバーを初期化する

保護されたデータ メンバーを持つクラスを継承する場合、子の初期化リストを使用してそれらを初期化することが望ましい場合があります。クラスのコンストラクター。ただし、この方法ではコンパイル エラーが発生することがよくあります。

この例では:

<code class="cpp">class Parent {
protected:
    std::string something;
};

class Child : public Parent {
private:
    Child() : something("Hello, World!") {}
};</code>

子クラス Child には何かという名前のメンバーがないため、このコードをコンパイルするとエラーが発生します。 .

これを解決するには、親クラス Parent で、保護されたメンバーを初期化するコンストラクターを定義する必要があります。このコンストラクターは保護されていると宣言でき、派生クラスがアクセスできるようになります。

以下の変更されたコードは正常にコンパイルされます:

<code class="cpp">class Parent {
protected:
    std::string something;
    Parent(const std::string& something) : something(something) {}
};

class Child : public Parent {
private:
    Child() : Parent("Hello, World!") {}
};</code>

この変更されたコードでは、親クラスの保護されたコンストラクターが転送されます。何かのメンバーへの初期化引数を指定し、子クラスが自身の初期化中に親の保護されたメンバーを初期化できるようにします。

この構文に従うことにより、子クラスの初期化リストを使用して保護された親メンバーを初期化できるようになり、以下を提供します。継承階層全体にわたるオブジェクト初期化の制御性と柔軟性が向上します。

以上が子クラスは初期化リストを通じて保護された親メンバーを初期化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。