Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП_лекции.docx
Скачиваний:
1
Добавлен:
16.11.2019
Размер:
27.2 Кб
Скачать

Полиморфизм

В полиморфизме можно выделить два аспекта.

  1. Полиморфизм метода

Под полиморфизмом метода можно понимать выполнение одного и того же метода различным способом для объектов разных классов в иерархии. Обеспечивается эта возможность за счет динамического связывания, которое реализуется с помощью виртуальных функций. Класс, содержащий виртуальные функции называется полиморфным. Синтаксически виртуальные функции определяются со словом virtual перед заголовком функции в описании класса.

Для полиморфного класса компилятор в случае создания объекта класса в программе автоматически гарнирует таблицу виртуальных функций vtable содержащую список адресов всех виртуальных функций класса. Таблица генерируется одна на класс, не зависимо от количества объектов создаваемых в программе. У каждого объекта компилятором добавляется отдельные компонентные данные (поле) предназначенные для хранения адреса vtable своего класса, которая заполняется конструктором в момент создания объекта.

()

Вызов виртуальной функции осуществляется с помощью цепочки команд сгенерированных компилятором:

  1. У объекта получить адрес vtable

  2. В vtable получить адрес вызываемой виртуальной функции

  3. Перейти на точку входа в функцию и выполнить ее программный код.

  1. Полиморфизм объектов

Под полиморфизмом объектов можно понимать возможность замены объекта одного класса объектом другого класса. Для того чтобы замена производилась корректно, необходимо:

  1. Классы находились в одной иерархии наследования

  2. Классы были полиморфны

  3. Объекты создавались динамически

В отношении объектов c++ меняет правило совместимости типов: производный класс совместим по типу с любым из своих предков.