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

21 Авг 2019 в 06:59
157 +1
0
Ответы
1

Для того чтобы правильно определить атрибуты при наследовании в 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 для каждого конкретного потомка.

20 Апр 2024 в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир