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

21 Авг 2019 в 06:59
135 +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 Апр в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 718 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир