1. ホーム
  2. c++

[解決済み] 初期化リストで親のprotectedメンバを初期化する(C++)

2022-05-11 17:52:37

質問

子クラスのコンストラクタの初期化リストを使用して、親クラスでprotectedと宣言されたデータメンバを初期化することは可能でしょうか。 うまくいきません。 私はそれを回避することができますが、私は私がする必要がない場合は素晴らしいことです。

いくつかのサンプルコードです。

class Parent
{
protected:
    std::string something;
};

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

これを試すと、コンパイラは私に次のように伝えます: "クラス 'Child' は 'something'" という名前のフィールドを持ちません。 このようなことは可能ですか? もしそうなら、構文は何ですか?

多くのありがとう!

どのように解決するのですか?

おっしゃるような方法では無理です。ベースクラスにコンストラクタ(protectedでも可)を追加して、それを転送する必要があります。次のようなものです。

class Parent
{
protected:
    Parent( const std::string& something ) : something( something )
    {}

    std::string something;
}

class Child : public Parent
{
private:
    Child() : Parent("Hello, World!")
    {
    }
}