Я не могу заставить метод переопределять работу. Сейчас у меня есть класс под названием Sprite и два подкласса; Назовем их Goomba и Koopa. Экземпляры Koopas и Goombas хранятся в std :: списке спрайтов, называемых spriteList, и итератор проходит через этот список и вызывает каждую функцию behh().Как переопределить в C++?
Я могу заставить это работать с одним только Goombas, определяя функцию поведения как Sprite :: behave(). Но если я попытаюсь сделать то же самое с Koopas, компилятор рассердится, потому что Sprite :: behave() уже определен в Goomba. Что я делаю не так? У меня возникает ощущение, что ответ является чрезвычайно простой проблемой синтаксиса, но поиск в Интернете не привел примеров, которые были похожи на мой код.
Я вставлю код, надеюсь, это поможет. Это не мой точный исходный код, поэтому я прошу прощения за любые опечатки.
//Sprite.h:
#ifndef SPRITE_H
#define SPRITE_H
class Sprite {
private:
float xPosition; float yPosition;
public:
Sprite(float xp, float yp);
void move(float x, float y); //this one is defined in Sprite.cpp
void behave(); //this one is NOT defined in Sprite.cpp
};
#endif
//Goomba.h:
#ifndef GOOMBA_H
#define GOOMBA_H
#include "Sprite.h"
class Goomba : public Sprite {
public:
Goomba(float xp, float yp);
void behave();
};
#endif
//Goomba.cpp:
#include "Goomba.h"
Goomba::Goomba(float xp, float yp): Enemy(xp, yp) {}
void Sprite::behave(){
Sprite::move(1, 0);
}
//Koopa.h looks just like Goomba.h
//Koopa.cpp
#include "Koopa.h"
Koopa::Koopa(float xp, float yp): Enemy(xp, yp) {}
void Sprite::behave(){
Sprite::move(-2, 1);
}
Для объявлений функций вам нужно использовать ключевое слово 'virtual'. –