Как правильно определить атрибуты при наследовании (c++, ООП)?

У меня есть определенная иерархия классов.
Мне нужно сделать, что бы через одни объекты можно было проходить а через другие нет.

Я думаю, что для этого мне нужно в базовый класс добавить атрибут типа:
bool obstacle = false;
А также метод:
bool isObstacle() {return obstacle}

После этого, например в Wall написать:
bool obstacle = true;

Но в таком виде оно не работает. Метод isObstacle все равно возвращает значение из базового класса.

Как это сделать правильно?
  • Вопрос задан
  • 117 просмотров
Пригласить эксперта
Ответы на вопрос 1
vt4a2h
@vt4a2h
Senior software engineer (C++/Qt/boost)
Можно сделать например так:
#include <iostream>
#include <iomanip>
#include <memory>

class ISomeInterface
{
public:
	virtual bool isFoo() const noexcept = 0;
};

class Foo : public ISomeInterface
{
public: 
	bool isFoo() const noexcept override { return true; }
};

class Bar : public ISomeInterface
{
public: 
	bool isFoo() const noexcept override { return false; }
};

int main()
{
	// Or shared_ptr/make_shared
	std::unique_ptr<ISomeInterface> foo = std::make_unique<Foo>();
	std::cout << "Foo is Foo: " << std::boolalpha << foo->isFoo() << std::endl;
	
	// Or shared_ptr/make_shared
	std::unique_ptr<ISomeInterface> bar = std::make_unique<Bar>();
	std::cout << "Bar is Foo: " << std::boolalpha << bar->isFoo() << std::endl;
	
	return 0;
}

Ну и в методах не обязательно возвращать просто true/false, там может быть любая другая переменная.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
OS33 Нижний Новгород
от 120 000 до 150 000 руб.
Хоум Пицца Екатеринбург
До 50 000 руб.
Zoon Москва
от 140 000 до 220 000 руб.