Как сделать объект или указатель базового класса, который может обращаться ко всем методам дочерних классов? У меня есть базовый класс wall, у которого есть координаты и текстура, есть его дочерний класс door, у которого есть координаты, текстура и метод open. У меня есть vector с объектами типа wall, в котором есть объекты типа door, мне нужно из этого vector'а вызвать метод open у всех объектов класса door.

21 Авг 2019 в 07:05
168 +1
0
Ответы
1

Для этого вам нужно воспользоваться механизмом полиморфизма в C++. Полиморфизм позволяет вызывать методы на объектах базового класса, которые на самом деле являются объектами дочерних классов.

Прежде всего, у вас должны быть виртуальные методы в базовом классе wall, которые будут переопределены в дочернем классе door. Например, добавьте в класс wall следующий виртуальный метод:

class wall
public
virtual void open() {} // виртуальный метод, который будет переопределен в дочернем классе doo
};

Затем переопределите метод open в дочернем классе door:

class door : public wall
public
void open() override
// реализация метода open для класса doo

};

Теперь у вас есть виртуальный метод open в базовом классе wall, который будет переопределен в дочернем классе door.

Далее, чтобы вызвать метод open для объектов класса door, находящихся в вашем векторе, пройдитесь по всем элементам вектора и проверьте, принадлежит ли текущий объект к классу door. Если да, то вызовите метод open:

std::vector<wall*> walls; // ваш вектор с объектами типа wal
for(wall* w : walls)
door* d = dynamic_cast<door*>(w); // пытаемся привести объект к классу doo
if(d) { // если успешно привели к классу doo
d->open(); // вызываем метод open для объекта класса doo

}

Этот способ позволит вам вызвать метод open для всех объектов класса door, находящихся в вашем векторе walls.

20 Апр в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 90 620 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир