2. Таблица виртуальных методов
∙ Динамический полиморфизм реализуется при помощи
таблиц виртуальных методов.
∙ Таблица заводится для каждого полиморфного класса.
∙ Объекты полиморфных классов содержат указатель на
таблицу виртуальных методов соответствующего класса.
vptr name_ age_
Person
vptr name_ age_ uni_
Person
Student
∙ Вызов виртуального метода — это вызов метода по адресу
из таблицы (в коде сохраняется номер метода в таблице).
p->occupation (); // p->vptr[1]();
2/5
3. Таблица виртуальных методов
struct Person {
virtual ~Person () {}
string name () const {return name_ ;}
virtual string occupation () const = 0;
...
};
struct Student : Person {
string occupation () const {return "student";}
virtual int group () const {return group_ ;}
...
};
Person
0 ~Person 0xab22
1 occupation 0x0000
Student
0 ~Student 0xab46
1 occupation 0xab68
2 group 0xab8a 3/5