继承和方法重写

时间:2019-02-27 20:56:07

标签: c++ inheritance override

我正在使用SFML在C ++中创建碰撞系统。我有一个使用以下方法的 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);
}

然后是实现 object 并覆盖两种方法的 player 类:

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(),那是可行的,但不是目标。

我想在 object 的子类中修改 onCollision(),而无需实现 reactCollision() checkCollision()。

0 个答案:

没有答案