Зачем в производных классах делать виртуальную функцию? Добрый день
Иногда натыкаюсь на примеры такого вида:class BaseABC
public
virtual void test()const = 0
..

class Heir : public BaseABC
public
virual void test()const
..

Зачем в производном классе делать переопределенную функцию виртуальной? Это делается для того, чтобы наследник Heir мог переопределить test? Если я захочу вызвать так://head.
class TooHeir : public Heir
public
void test()const
..

//realize.cp
void TooHeir::test()const
std::couttest()
В итоге вот какой вопрос: виртуальные функции действуют только на 1 уровень наследования? Насколько я знаю, деструкторы действуют на бесконечное количество цепочек наследования BaceABC->Heir->TooHeir->...

21 Авг 2019 в 07:00
146 +1
0
Ответы
1

Виртуальные функции в производных классах используются, чтобы позволить дальнейшее переопределение этой функции в дальнейших производных классах. При вызове функции через указатель на базовый класс, будет вызываться переопределенная версия функции из самого нижнего класса в цепочке наследования.

В вашем примере, если вызвать функцию test() через указатель на объект класса TooHeir, будет вызвана именно переопределенная версия этой функции из класса TooHeir.

Виртуальность функций применима на любое количество уровней наследования, не только на 1 уровень. Деструкторы также виртуальные для обеспечения корректного удаления объектов из любого класса в цепочке наследования.

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