Как правильно определить атрибуты при наследовании (c++, ООП)? У меня есть определенная иерархия классов. Мне нужно сделать, что бы через одни объекты можно было проходить а через другие нет. Я думаю, что для этого мне нужно в базовый класс добавить атрибут типа: bool obstacle = false; А также метод: bool isObstacle() {return obstacle} После этого, например в Wall написать: bool obstacle = true; Но в таком виде оно не работает. Метод isObstacle все равно возвращает значение из базового класса. Как это сделать правильно?
Для того чтобы правильно определить атрибуты при наследовании в C++, необходимо использовать ключевое слово virtual при определении метода в базовом классе. В вашем случае, метод isObstacle должен быть объявлен как виртуальный в базовом классе, чтобы потомки могли переопределить его по своему усмотрению.
Для того чтобы правильно определить атрибуты при наследовании в C++, необходимо использовать ключевое слово virtual при определении метода в базовом классе. В вашем случае, метод isObstacle должен быть объявлен как виртуальный в базовом классе, чтобы потомки могли переопределить его по своему усмотрению.
Примерно такой код должен выглядеть:
class GameObject {protected:
bool obstacle = false;
public:
virtual bool isObstacle() { return obstacle; }
};
class Wall : public GameObject {
public:
Wall() {
obstacle = true;
}
bool isObstacle() override {
return obstacle;
}
};
Теперь метод isObstacle будет корректно возвращать значение атрибута obstacle для каждого конкретного потомка.