今回は、静的メンバの継承についてお伺いに参りました。
現在、敵キャラクラスを作っております。
敵に共通したメンバやメソッドをEnemyクラスにまとめ親クラスとし、
それを継承した子クラスが個々の敵キャラとなるように作っております。
全ての敵キャラのインスタンスが同じグラフィックの領域を確保する必要も無いので、
子クラスの静的メンバにグラフィックの領域を確保し、共有させようと考えています。
そこで、親クラスのグラフィック用の静的メンバを継承させ、
各子クラスにもクラス別の静的メンバを持たせようと思ったのですが、
親クラスを継承した全ての子クラスで共有のメンバになってしまいます。
わかりにくいかもしれないので、以下に例を貼り付けます。
StaticMemberを、Parentを継承した各Childクラスに一つずつ持たせたいのですが、そうなりません。
#include <stdio.h>
class Parent
{
public:
static short StaticMember;
Parent()
{
printf("P StaticMember = %hd\n",StaticMember);
}
void PrintMember()
{
printf("StaticMember = %hd\n",StaticMember);
}
};
short Parent::StaticMember=1;
class Child1:public Parent
{
public:
Child1()
{
StaticMember=StaticMember+10;
printf("C1 StaticMember = %hd\n",StaticMember);
}
};
class Child2:public Parent
{
public:
Child2()
{
StaticMember=StaticMember+100;
printf("C2 StaticMember = %hd\n",StaticMember);
}
};
int main()
{
Parent PIns;
Child1 C1Ins1,C1Ins2;
Child2 C2Ins1,C2Ins2;
PIns.PrintMember(); // 1 になってほしい
C1Ins1.PrintMember(); // 21 になってほしい
C1Ins2.PrintMember(); // 21 になってほしい
C2Ins1.PrintMember(); // 201 になってほしい
C2Ins2.PrintMember(); // 201 になってほしい
return 0;
}
------------------------------実行結果----------------------------------------P StaticMember = 1
P StaticMember = 1
C1 StaticMember = 11
P StaticMember = 11
C1 StaticMember = 21
P StaticMember = 21
C2 StaticMember = 121
P StaticMember = 121
C2 StaticMember = 221
StaticMember = 221
StaticMember = 221
StaticMember = 221
StaticMember = 221
StaticMember = 221
------------------------------実行結果ここまで----------------------------------
静的メンバを、親クラスのメンバとは別のものとして継承する方法はあるのでしょうか?
それとも、静的メンバは継承した全ての子クラスで必ず共有しなければならないのでしょうか。
やはり、面倒がらずに各子クラスでも静的メンバを宣言しなければいけないのでしょうか。