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

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

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

Can Protected Parent Class Members Be Initialized via Child Class's Initialization List?

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

オブジェクト指向プログラミングでは、派生クラスは基本クラスから機能を継承できます。 。よく生じる質問の 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 サイトの他の関連記事を参照してください。

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