Результаты
e id = class employee ePtr id = class employee * m id = class manager mPtr id = class manager *
staff[0] id = class employee staff[1] id = class manager
Реализацияпозднегосвязывания
вязыкеC++
ВC++ инекоторыхдругихязыках позднеесвязываниереализуется путемиспользованиятаблицы виртуальныхметодов(VMT - Virtual Methods Table)
ПриналичииVMT адресметода определяетсяуженаэтапе выполнения.
VMT создаётсядлякласса.
- Тытаблицувидишь? - Нет.
class A { int x; public:
void print(){}
};
class B { int x; public:
virtual void print(){}
};
Исправимпримерсартистами
class Performer {
//...
public:
//...
virtual void perform() //...
//...
};
Длятого,чтобысделатьметодполиморфным достаточнообъявитьегосключевымсловом virtual тольковбазовомклассе.