Как работают виртуальные функции.

Если в базовом классе функция объявлена как виртуальная , то её вызовы будут обрабатываться методом динамического связывания. Ключевое слово virtual предписывает компилятору генерировать дополнительную информацию о функциях.

Предположим, что существует класс GrafObj(x,y) — базовый класс, исходный от него класс Cub(d,w). При создании объекта класс Cub, сначала выполниться конструктор базового класса.

на рисунках представлены схемы работы виртуальной функции Draw VPTR — указатель на таблицу виртуальных функций. Эта таблица содержит указатели на все виртуальные функции класса. При инициализации объекта Cub указатель VPTR указывает на Draw(GrafObj), после работы конструктора самого класса Cub, он перенастраивается для функции Draw для класса Cub (если есть на что настраиваться).Особенностью работы с виртуальными функциями является то ,что они работают только при обращении к ним по ссылке или указателю.


#include<iostream.h>