SlideShare a Scribd company logo
Программирование на языке C++
Лекция 4
Таблица виртуальных методов
Александр Смаль
1/5
Таблица виртуальных методов
∙ Динамический полиморфизм реализуется при помощи
таблиц виртуальных методов.
∙ Таблица заводится для каждого полиморфного класса.
∙ Объекты полиморфных классов содержат указатель на
таблицу виртуальных методов соответствующего класса.
vptr name_ age_
Person
vptr name_ age_ uni_
Person
Student
∙ Вызов виртуального метода — это вызов метода по адресу
из таблицы (в коде сохраняется номер метода в таблице).
p->occupation (); // p->vptr[1]();
2/5
Таблица виртуальных методов
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
Построение таблицы виртуальных методов
struct Person {
virtual ~Person () {}
virtual string occupation () = 0;
...
};
struct Teacher : Person {
string occupation () {...}
virtual string course () {...}
...
};
struct Professor : Teacher {
string occupation () {...}
virtual string thesis () {...}
...
};
Person
0 ~Person 0xab20
1 occupation 0x0000
Teacher
0 ~Teacher 0xab48
1 occupation 0xab60
2 course 0xab84
Professor
0 ~Professor 0xaba8
1 occupation 0xabb4
2 course 0xab84
3 thesis 0xabc8
4/5
Виртуальные методы в конструкторе и деструкторе
struct Person {
virtual string name () const {return name_ ;}
...
};
struct Teacher : Person {
Teacher(string const& nm) : Person(nm)
{ cout << name (); }
...
};
struct Professor : Teacher {
string name () const {return "Prof. "+name_ ;}
...
};
Professor p("Stroustrup"); // "Stroustrup"
5/5

More Related Content

What's hot

6.3 Специализация шаблонов
6.3 Специализация шаблонов6.3 Специализация шаблонов
6.3 Специализация шаблонов
DEVTYPE
 
3.1 Структуры
3.1 Структуры3.1 Структуры
3.1 Структуры
DEVTYPE
 
5.4 Ключевые слова static и inline
5.4 Ключевые слова static и inline5.4 Ключевые слова static и inline
5.4 Ключевые слова static и inline
DEVTYPE
 
3.8 Класс массива
3.8 Класс массива3.8 Класс массива
3.8 Класс массива
DEVTYPE
 
3.4 Объекты и классы
3.4 Объекты и классы3.4 Объекты и классы
3.4 Объекты и классы
DEVTYPE
 
3.5 Модификаторы доступа
3.5 Модификаторы доступа3.5 Модификаторы доступа
3.5 Модификаторы доступа
DEVTYPE
 
3.7 Конструктор копирования и оператор присваивания
3.7 Конструктор копирования и оператор присваивания3.7 Конструктор копирования и оператор присваивания
3.7 Конструктор копирования и оператор присваивания
DEVTYPE
 
2.7 Многомерные массивы
2.7 Многомерные массивы2.7 Многомерные массивы
2.7 Многомерные массивы
DEVTYPE
 
2.6 Динамическая память
2.6 Динамическая память2.6 Динамическая память
2.6 Динамическая память
DEVTYPE
 
контрольная работа Variant i
контрольная работа Variant iконтрольная работа Variant i
контрольная работа Variant ileshiy_AlisA
 
5.5 Ключевое слово friend
5.5 Ключевое слово friend5.5 Ключевое слово friend
5.5 Ключевое слово friend
DEVTYPE
 
Proizvodnaya i grafiki_funkcii
Proizvodnaya i grafiki_funkciiProizvodnaya i grafiki_funkcii
Proizvodnaya i grafiki_funkcii
Dimon4
 
Erlang
ErlangErlang
Kubicheskaya funkciya grafik
Kubicheskaya funkciya grafikKubicheskaya funkciya grafik
Kubicheskaya funkciya grafik
Ivanchik5
 
алгоритмизация метода касательных
алгоритмизация метода касательныхалгоритмизация метода касательных
алгоритмизация метода касательных
Colegiul de Industrie Usoara
 
тест
тесттест
тестsvetlup
 
лабораторная работа №5
лабораторная работа №5лабораторная работа №5
лабораторная работа №5Zhanna Kazakova
 
вывод алфавитно цифровой информации
вывод алфавитно цифровой информациивывод алфавитно цифровой информации
вывод алфавитно цифровой информации
Lungu
 

What's hot (20)

6.3 Специализация шаблонов
6.3 Специализация шаблонов6.3 Специализация шаблонов
6.3 Специализация шаблонов
 
3.1 Структуры
3.1 Структуры3.1 Структуры
3.1 Структуры
 
5.4 Ключевые слова static и inline
5.4 Ключевые слова static и inline5.4 Ключевые слова static и inline
5.4 Ключевые слова static и inline
 
3.8 Класс массива
3.8 Класс массива3.8 Класс массива
3.8 Класс массива
 
3.4 Объекты и классы
3.4 Объекты и классы3.4 Объекты и классы
3.4 Объекты и классы
 
3.5 Модификаторы доступа
3.5 Модификаторы доступа3.5 Модификаторы доступа
3.5 Модификаторы доступа
 
3.7 Конструктор копирования и оператор присваивания
3.7 Конструктор копирования и оператор присваивания3.7 Конструктор копирования и оператор присваивания
3.7 Конструктор копирования и оператор присваивания
 
лекция 1
лекция 1лекция 1
лекция 1
 
2.7 Многомерные массивы
2.7 Многомерные массивы2.7 Многомерные массивы
2.7 Многомерные массивы
 
2.6 Динамическая память
2.6 Динамическая память2.6 Динамическая память
2.6 Динамическая память
 
контрольная работа Variant i
контрольная работа Variant iконтрольная работа Variant i
контрольная работа Variant i
 
5.5 Ключевое слово friend
5.5 Ключевое слово friend5.5 Ключевое слово friend
5.5 Ключевое слово friend
 
Proizvodnaya i grafiki_funkcii
Proizvodnaya i grafiki_funkciiProizvodnaya i grafiki_funkcii
Proizvodnaya i grafiki_funkcii
 
Erlang
ErlangErlang
Erlang
 
Kubicheskaya funkciya grafik
Kubicheskaya funkciya grafikKubicheskaya funkciya grafik
Kubicheskaya funkciya grafik
 
лекция 3
лекция 3лекция 3
лекция 3
 
алгоритмизация метода касательных
алгоритмизация метода касательныхалгоритмизация метода касательных
алгоритмизация метода касательных
 
тест
тесттест
тест
 
лабораторная работа №5
лабораторная работа №5лабораторная работа №5
лабораторная работа №5
 
вывод алфавитно цифровой информации
вывод алфавитно цифровой информациивывод алфавитно цифровой информации
вывод алфавитно цифровой информации
 

Viewers also liked

2.3 Указатели и массивы
2.3 Указатели и массивы2.3 Указатели и массивы
2.3 Указатели и массивы
DEVTYPE
 
3. Объекты, классы и пакеты в Java
3. Объекты, классы и пакеты в Java3. Объекты, классы и пакеты в Java
3. Объекты, классы и пакеты в Java
DEVTYPE
 
2.5 Ссылки
2.5 Ссылки2.5 Ссылки
2.5 Ссылки
DEVTYPE
 
4.5 Объектно-ориентированное программирование
4.5 Объектно-ориентированное программирование4.5 Объектно-ориентированное программирование
4.5 Объектно-ориентированное программирование
DEVTYPE
 
Квадратичная математика
Квадратичная математикаКвадратичная математика
Квадратичная математика
DEVTYPE
 
6.1 Шаблоны классов
6.1 Шаблоны классов6.1 Шаблоны классов
6.1 Шаблоны классов
DEVTYPE
 
4.1 Наследование
4.1 Наследование4.1 Наследование
4.1 Наследование
DEVTYPE
 
1. Введение в Java
1. Введение в Java1. Введение в Java
1. Введение в Java
DEVTYPE
 
6. Generics. Collections. Streams
6. Generics. Collections. Streams6. Generics. Collections. Streams
6. Generics. Collections. Streams
DEVTYPE
 
3.6 Константность
3.6 Константность3.6 Константность
3.6 Константность
DEVTYPE
 
Программирование: теоремы и задачи
Программирование: теоремы и задачиПрограммирование: теоремы и задачи
Программирование: теоремы и задачи
DEVTYPE
 
4. Обработка ошибок, исключения, отладка
4. Обработка ошибок, исключения, отладка4. Обработка ошибок, исключения, отладка
4. Обработка ошибок, исключения, отладка
DEVTYPE
 
4.6 Особенности наследования в C++
4.6 Особенности наследования в C++4.6 Особенности наследования в C++
4.6 Особенности наследования в C++
DEVTYPE
 
2.4 Использование указателей
2.4 Использование указателей2.4 Использование указателей
2.4 Использование указателей
DEVTYPE
 
5.1 Перегрузка операторов
5.1 Перегрузка операторов5.1 Перегрузка операторов
5.1 Перегрузка операторов
DEVTYPE
 
5. Ввод-вывод, доступ к файловой системе
5. Ввод-вывод, доступ к файловой системе5. Ввод-вывод, доступ к файловой системе
5. Ввод-вывод, доступ к файловой системе
DEVTYPE
 

Viewers also liked (16)

2.3 Указатели и массивы
2.3 Указатели и массивы2.3 Указатели и массивы
2.3 Указатели и массивы
 
3. Объекты, классы и пакеты в Java
3. Объекты, классы и пакеты в Java3. Объекты, классы и пакеты в Java
3. Объекты, классы и пакеты в Java
 
2.5 Ссылки
2.5 Ссылки2.5 Ссылки
2.5 Ссылки
 
4.5 Объектно-ориентированное программирование
4.5 Объектно-ориентированное программирование4.5 Объектно-ориентированное программирование
4.5 Объектно-ориентированное программирование
 
Квадратичная математика
Квадратичная математикаКвадратичная математика
Квадратичная математика
 
6.1 Шаблоны классов
6.1 Шаблоны классов6.1 Шаблоны классов
6.1 Шаблоны классов
 
4.1 Наследование
4.1 Наследование4.1 Наследование
4.1 Наследование
 
1. Введение в Java
1. Введение в Java1. Введение в Java
1. Введение в Java
 
6. Generics. Collections. Streams
6. Generics. Collections. Streams6. Generics. Collections. Streams
6. Generics. Collections. Streams
 
3.6 Константность
3.6 Константность3.6 Константность
3.6 Константность
 
Программирование: теоремы и задачи
Программирование: теоремы и задачиПрограммирование: теоремы и задачи
Программирование: теоремы и задачи
 
4. Обработка ошибок, исключения, отладка
4. Обработка ошибок, исключения, отладка4. Обработка ошибок, исключения, отладка
4. Обработка ошибок, исключения, отладка
 
4.6 Особенности наследования в C++
4.6 Особенности наследования в C++4.6 Особенности наследования в C++
4.6 Особенности наследования в C++
 
2.4 Использование указателей
2.4 Использование указателей2.4 Использование указателей
2.4 Использование указателей
 
5.1 Перегрузка операторов
5.1 Перегрузка операторов5.1 Перегрузка операторов
5.1 Перегрузка операторов
 
5. Ввод-вывод, доступ к файловой системе
5. Ввод-вывод, доступ к файловой системе5. Ввод-вывод, доступ к файловой системе
5. Ввод-вывод, доступ к файловой системе
 

More from DEVTYPE

Рукописные лекции по линейной алгебре
Рукописные лекции по линейной алгебреРукописные лекции по линейной алгебре
Рукописные лекции по линейной алгебре
DEVTYPE
 
1.4 Точечные оценки и их свойства
1.4 Точечные оценки и их свойства1.4 Точечные оценки и их свойства
1.4 Точечные оценки и их свойства
DEVTYPE
 
1.3 Описательная статистика
1.3 Описательная статистика1.3 Описательная статистика
1.3 Описательная статистика
DEVTYPE
 
1.2 Выборка. Выборочное пространство
1.2 Выборка. Выборочное пространство1.2 Выборка. Выборочное пространство
1.2 Выборка. Выборочное пространство
DEVTYPE
 
Continuity and Uniform Continuity
Continuity and Uniform ContinuityContinuity and Uniform Continuity
Continuity and Uniform Continuity
DEVTYPE
 
Coin Change Problem
Coin Change ProblemCoin Change Problem
Coin Change Problem
DEVTYPE
 
Recurrences
RecurrencesRecurrences
Recurrences
DEVTYPE
 
D-кучи и их применение
D-кучи и их применениеD-кучи и их применение
D-кучи и их применение
DEVTYPE
 
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицы
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицыДиаграммы Юнга, плоские разбиения и знакочередующиеся матрицы
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицы
DEVTYPE
 
ЖАДНЫЕ АЛГОРИТМЫ
ЖАДНЫЕ АЛГОРИТМЫ ЖАДНЫЕ АЛГОРИТМЫ
ЖАДНЫЕ АЛГОРИТМЫ
DEVTYPE
 
Скорость роста функций
Скорость роста функцийСкорость роста функций
Скорость роста функций
DEVTYPE
 
Asymptotic Growth of Functions
Asymptotic Growth of FunctionsAsymptotic Growth of Functions
Asymptotic Growth of Functions
DEVTYPE
 
Кучи
КучиКучи
Кучи
DEVTYPE
 
Кодирование Хаффмана
Кодирование ХаффманаКодирование Хаффмана
Кодирование Хаффмана
DEVTYPE
 
Жадные алгоритмы: введение
Жадные алгоритмы: введениеЖадные алгоритмы: введение
Жадные алгоритмы: введение
DEVTYPE
 
Разбор задач по дискретной вероятности
Разбор задач по дискретной вероятностиРазбор задач по дискретной вероятности
Разбор задач по дискретной вероятности
DEVTYPE
 
Разбор задач модуля "Теория графов ll"
Разбор задач модуля "Теория графов ll"Разбор задач модуля "Теория графов ll"
Разбор задач модуля "Теория графов ll"
DEVTYPE
 
Наибольший общий делитель
Наибольший общий делительНаибольший общий делитель
Наибольший общий делитель
DEVTYPE
 
Числа Фибоначчи
Числа ФибоначчиЧисла Фибоначчи
Числа Фибоначчи
DEVTYPE
 
О-символика
О-символикаО-символика
О-символика
DEVTYPE
 

More from DEVTYPE (20)

Рукописные лекции по линейной алгебре
Рукописные лекции по линейной алгебреРукописные лекции по линейной алгебре
Рукописные лекции по линейной алгебре
 
1.4 Точечные оценки и их свойства
1.4 Точечные оценки и их свойства1.4 Точечные оценки и их свойства
1.4 Точечные оценки и их свойства
 
1.3 Описательная статистика
1.3 Описательная статистика1.3 Описательная статистика
1.3 Описательная статистика
 
1.2 Выборка. Выборочное пространство
1.2 Выборка. Выборочное пространство1.2 Выборка. Выборочное пространство
1.2 Выборка. Выборочное пространство
 
Continuity and Uniform Continuity
Continuity and Uniform ContinuityContinuity and Uniform Continuity
Continuity and Uniform Continuity
 
Coin Change Problem
Coin Change ProblemCoin Change Problem
Coin Change Problem
 
Recurrences
RecurrencesRecurrences
Recurrences
 
D-кучи и их применение
D-кучи и их применениеD-кучи и их применение
D-кучи и их применение
 
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицы
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицыДиаграммы Юнга, плоские разбиения и знакочередующиеся матрицы
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицы
 
ЖАДНЫЕ АЛГОРИТМЫ
ЖАДНЫЕ АЛГОРИТМЫ ЖАДНЫЕ АЛГОРИТМЫ
ЖАДНЫЕ АЛГОРИТМЫ
 
Скорость роста функций
Скорость роста функцийСкорость роста функций
Скорость роста функций
 
Asymptotic Growth of Functions
Asymptotic Growth of FunctionsAsymptotic Growth of Functions
Asymptotic Growth of Functions
 
Кучи
КучиКучи
Кучи
 
Кодирование Хаффмана
Кодирование ХаффманаКодирование Хаффмана
Кодирование Хаффмана
 
Жадные алгоритмы: введение
Жадные алгоритмы: введениеЖадные алгоритмы: введение
Жадные алгоритмы: введение
 
Разбор задач по дискретной вероятности
Разбор задач по дискретной вероятностиРазбор задач по дискретной вероятности
Разбор задач по дискретной вероятности
 
Разбор задач модуля "Теория графов ll"
Разбор задач модуля "Теория графов ll"Разбор задач модуля "Теория графов ll"
Разбор задач модуля "Теория графов ll"
 
Наибольший общий делитель
Наибольший общий делительНаибольший общий делитель
Наибольший общий делитель
 
Числа Фибоначчи
Числа ФибоначчиЧисла Фибоначчи
Числа Фибоначчи
 
О-символика
О-символикаО-символика
О-символика
 

4.4 Таблица виртуальных методов

  • 1. Программирование на языке C++ Лекция 4 Таблица виртуальных методов Александр Смаль 1/5
  • 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
  • 4. Построение таблицы виртуальных методов struct Person { virtual ~Person () {} virtual string occupation () = 0; ... }; struct Teacher : Person { string occupation () {...} virtual string course () {...} ... }; struct Professor : Teacher { string occupation () {...} virtual string thesis () {...} ... }; Person 0 ~Person 0xab20 1 occupation 0x0000 Teacher 0 ~Teacher 0xab48 1 occupation 0xab60 2 course 0xab84 Professor 0 ~Professor 0xaba8 1 occupation 0xabb4 2 course 0xab84 3 thesis 0xabc8 4/5
  • 5. Виртуальные методы в конструкторе и деструкторе struct Person { virtual string name () const {return name_ ;} ... }; struct Teacher : Person { Teacher(string const& nm) : Person(nm) { cout << name (); } ... }; struct Professor : Teacher { string name () const {return "Prof. "+name_ ;} ... }; Professor p("Stroustrup"); // "Stroustrup" 5/5