Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lect06.pdf
Скачиваний:
4
Добавлен:
06.02.2016
Размер:
509.38 Кб
Скачать

Результаты

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(){}

};

- Аонаесть!

// ...

A a; B b;

cout << "A size = "

<< sizeof(a) << endl;

cout << "B size = "

<< sizeof(b) << endl;

Результат:

A size = 4 B size = 8

Исправимпримерсартистами

class Performer {

//...

public:

//...

virtual void perform() //...

//...

};

Длятого,чтобысделатьметодполиморфным достаточнообъявитьегосключевымсловом virtual тольковбазовомклассе.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]