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);