スタティックの継承

前のエントリ「忘れないうちにスタティックイニシャライザー」がひどい感じにおかしかったので修正しました。
#includeが>とか使ってなかったから消えてた。あと単純な間違いもあった。
そのついでに、「継承したらどうなるんだろう。」ってのをやってみました。

TestClass.h


template<typename T>
class TestClass {
    static int a;
};
template<typename T>
int TestClass<T>::a = 0;

TestA.h


class TestA : public TestClass<int> {
};

TestB.h


class TestB : public TestClass<int> {
}; 

main.cpp


int main(void) {
   TestA::a = 111;
   TestB::a = 222;

   printf("%d", TestA::a);

   return 0;
}

結果


222

というわけで、しっかりスタティックでした。
もしTestClassのaが翻訳単位だとしたら(?)、TestA::aとTestB::aが違う実体をさしてしまうんじゃないかという杞憂。
だいじょうぶ、どっちも唯一の実体TestClass::aを見てました。

以上

コスミー について

昔(?)はゲーム作ってました。 今もなんか作ろうとしています。
カテゴリー: C++ パーマリンク

コメントを残す

メールアドレスが公開されることはありません。