Зачем в производных классах делать виртуальную функцию? Добрый день! Иногда натыкаюсь на примеры такого вида:class BaseABC{ public: virtual void test()const = 0; ... } class Heir : public BaseABC{ public: virual void test()const; ... } Зачем в производном классе делать переопределенную функцию виртуальной? Это делается для того, чтобы наследник Heir мог переопределить test? Если я захочу вызвать так://head.h class TooHeir : public Heir{ public: void test()const; ... } //realize.cpp void TooHeir::test()const{ std::couttest(); В итоге вот какой вопрос: виртуальные функции действуют только на 1 уровень наследования? Насколько я знаю, деструкторы действуют на бесконечное количество цепочек наследования BaceABC->Heir->TooHeir->...
Виртуальные функции в производных классах используются, чтобы позволить дальнейшее переопределение этой функции в дальнейших производных классах. При вызове функции через указатель на базовый класс, будет вызываться переопределенная версия функции из самого нижнего класса в цепочке наследования.
В вашем примере, если вызвать функцию test() через указатель на объект класса TooHeir, будет вызвана именно переопределенная версия этой функции из класса TooHeir.
Виртуальность функций применима на любое количество уровней наследования, не только на 1 уровень. Деструкторы также виртуальные для обеспечения корректного удаления объектов из любого класса в цепочке наследования.
Виртуальные функции в производных классах используются, чтобы позволить дальнейшее переопределение этой функции в дальнейших производных классах. При вызове функции через указатель на базовый класс, будет вызываться переопределенная версия функции из самого нижнего класса в цепочке наследования.
В вашем примере, если вызвать функцию test() через указатель на объект класса TooHeir, будет вызвана именно переопределенная версия этой функции из класса TooHeir.
Виртуальность функций применима на любое количество уровней наследования, не только на 1 уровень. Деструкторы также виртуальные для обеспечения корректного удаления объектов из любого класса в цепочке наследования.