Наследование и переопределение методов - PullRequest
0 голосов
/ 27 февраля 2019

Я делаю систему коллизий в C ++ с SFML.У меня есть базовый класс object со следующими методами:

class Object : public sf::CircleShape {
protected:
    bool collision;

    void onCollision();
    void afterCollision();
public:
    bool checkCollision(Object& object);
    bool reactCollision(bool _collision);
};

bool Object::checkCollision(Object& object) {
    //Calcul distance with object and radius    
    bool _collision = (distance <= radius)? true : false;

    this->reactCollision(_collision)
    return _collision;
}

bool Object::reactCollision(bool _collision) {
    //If collision state change compare to previous
    if(_collision != collision) {
        if(_collision) {
            this->onCollision();
        }
        else {
            this->afterCollision();
        }

        collision = _collision;
    }
    return _collision;
}

void Object::onCollision() {
    this->setFillColor(sf::Color::Red);
}
void Object::afterCollision() {
    this->setFillColor(sf::Color::White);
}

А затем класс player , который реализует object и переопределяет два метода:

class Player : public Object {
protected:
    void onCollision();
    void afterCollision();
};

void Player::onCollision() {
    this->setFillColor(sf::Color::Magenta);
}
void Player::afterCollision() {
    this->setFillColor(sf::Color::Green);
}

Проблема: игрок использует базовые методы родителей вместо своих собственных специализированных методов.Если я реализую reactCollision () и checkCollision () в классе игрока, это работает, но это не цель.

Я хотел бы изменить onCollision() в детских классах объект без реализации того же кода из actCollision () и checkCollision () в дочерних классах.

...