1. ホーム
  2. c++

[解決済み] 静的フィールドは継承されるのか?

2022-11-26 19:54:31

質問

静的メンバが継承された場合、階層全体に対して静的なのか、それともそのクラスだけに対して静的なのか、つまり。

class SomeClass
{
public:
    SomeClass(){total++;}
    static int total;
};

class SomeDerivedClass: public SomeClass
{
public:
    SomeDerivedClass(){total++;}
};

int main()
{
    SomeClass A;
    SomeClass B;
    SomeDerivedClass C;
    return 0;
}

の場合、3つのインスタンスすべてで合計が3になるのか、それとも SomeClass で2、そして SomeDerivedClass ?

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

3は、すべてのケースで static int total に継承されている SomeDerivedClass はまさに SomeClass であり、別個の変数ではありません。

編集:実際には 4 となっており、@ejames さんの回答で指摘されているので、参照してください。

編集: 2つ目の質問のコードは int がないのですが、これを追加することでOK、すなわち

class A
{
public:
    static int MaxHP;
};
int A::MaxHP = 23;

class Cat: A
{
public:
    static const int MaxHP = 100;
};

は、A::MaxHP と Cat::MaxHP に異なる値を指定しても正常に動作します。この場合、サブクラスはベースクラスから静的な値を継承しておらず、いわば独自の同名のものを使って隠しています。