使用静态成员继承具有函数的类

时间:2011-12-08 21:32:43

标签: c++ oop class inheritance static

我有一个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没有精灵成员。我如何编写它以便它知道继承它的类?

3 个答案:

答案 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; }
}