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

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

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

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

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

Как это сделать правильно?
  • Вопрос задан
  • 182 просмотра
Пригласить эксперта
Ответы на вопрос 1
vt4a2h
@vt4a2h Куратор тега C++
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, там может быть любая другая переменная.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы