Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Наследование и шаблоны






Наследуем:

1. Обычный класс на основе шаблонного

2. Шаблонный класс на основе шаблонного

3. Шаблонный на основе обычного

 

 

Полиморфизм

           
   
     
 
 

 

 


Статический динамический

 

ранее Связывание позднее

Процесс связывание происходит на этапе компиляции:

1.Перегрузка функций.

2.Перегрузка

3.Шаблон(функции, классы)

Для них происходит статический полиморфизм, то есть раннее связывания.

 

Связывание – это сопоставление вызова функции с её реализацией.

Связывание бывает ранним и поздним, все функции в с++ имеют ранее связывание, то есть компилятор и компоновщик решает какая именно вызовется функция ещё до запуска программы.

На принципах раннего связывания основан, так называемый, статический полиморфизм, то есть имеется общая спецификация и предоставляется разные реализации, однако выбор реализации происходит до этапа выполнения.

Позднее связывание – это процесс при котором при вызове функции тело для неё (реализация), определяется на этапе выполнение программы.

Динамический полиморфизм основан на позднем связывании, что подразумевает, что для конкретной спецификации, реализация определяется внешними фактами.

Динамический полиморфизм в ООП организуется с помощью н аследования и виртуальных функций (методов).

 

Для того, чтобы метод в родительском классе стал виртуальным, необходимо перед его именем написать ключевое слово virtual. Таким образом мы сообщаем компилятору, что данный метод предназначен для участия в поздним связывании.

 

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

 

 

VPTR – (скрытое поле) указатель на таблицу (увеличивает размер объекта).

VPTR не наследуется!

VTABLE - cодержит адреса реализации виртуальных методов.

Когда создается объект потомка

1.Медоды в потоке тоже виртуальны.

2. для потомка тоже создается VPTR

3.VPTR – не наследуется à у родителя свой à у потомка свой

4. VPTR – инициализация автоматом в конструкторе

 

Если есть хоть одна чисто виртуальная функция в классе

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.