我有一个类Enemy
,我想成为所有敌人类型的基类,也是纯抽象类。此时,它的所有成员和方法都应该由派生类共享。特别是,有loadTexture
使用静态成员的方法texture
。
class Enemy
{
int hp;
int damage;
//
// all other fields
//
static TextureClass* texture; //needs to be static because every instance
//of enemy uses the same texture
public:
static void loadTexture()
{
CreateTextureFromFile("somefilepath",&texture); //needs to be static
// because textures are loaded before any instance is crated
}
void draw()
{
DrawToScreen(&texture, ...many data members passed here...);
}
};
TextureClass* Enemy::texture = nullptr;
现在,如果我想进行Enemy
抽象并创建不同的敌人类型,显而易见的选择是继承。所以我创建:
class EnemyA : Enemy
{
static TextureClass* texture;
};
class EnemyB : Enemy
{
static TextureClass* texture;
};
但是现在,我如何为每个加载纹理?loadTexture
我显然不能在 base 中使用定义。因此,除了编写 X 次相同的方法(其中 X 是敌人类型的数量)之外,唯一的选择是loadTexture
从基础中移除并创建一个全局函数,对吗?同样适用draw
,我需要为每个派生重新定义它,即使它看起来完全一样......
TL;DR无论敌人类型如何loadTexture
,draw
他们都拥有完全相同的身体,但他们使用的静态场各不相同。有没有办法定义类似统一方法的东西,当在派生类中调用时会使用派生的字段,而不是基类?
谢谢你的任何答案。