我有一个Bullet类,它有一个draw()函数。它希望将静态成员(SDL_surface类的对象)传递给此函数,但不确定如何正确执行此操作。 我的课程:
class AllyBullet: public Bullet
{
public:
static SDL_Surface *sprite;
};
class EnemyBullet: public Bullet
{
public:
static SDL_Surface *sprite;
};
void Bullet::Draw(SDL_Surface *screen)
{
DrawSprite(screen,sprite,posX,posY);
}
Bullet没有精灵成员。我如何编写它以便它知道继承它的类?
答案 0 :(得分:1)
你可以让sprite虚拟化。像这样:
struct Bullet
{
virtual Sprite getSprite() const;
void Draw(SDL_Surface * screen)
{
DrawSprite(screen, getSprite(), posX, posY);
}
// ...
};
struct AllyBullet : public Bullet
{
static Sprite s;
virtual Sprite getSprite() const { return s; }
// ...
};
答案 1 :(得分:0)
Bullet应该指定一个get_sprite()方法,该方法必须由AllyBullet和EnemyBullet实现:
class Bullet {
virtual SDL_Surface * get_sprite() = 0;
}
将按如下方式实施
SDL_Surface * EnemyBullet :: get_sprite() { return sprite; }
SDL_Surface * AllyBullet :: get_sprite() { return sprite; }
然后你可以做
DrawSprite(screen,get_sprite(),posX,posY);
答案 2 :(得分:0)
如果Bullet是(或可以是)抽象的,那么你可以拥有一个纯虚函数:
struct Bullet
{
SDL_Surface* get_sprite () = 0;
}
然后每个继承的类都实现此方法。但如果他们都做同样的工作(并且都应该有一个精灵)那么sprite属于Bullet并且可以使用getter访问:
strut Bullet
{
SDL_Surface* get_sprite () { return sprite; }
}