Step 2 (S-10678)

From Stepik Wiki
Jump to: navigation, search

Step on Stepik: https://stepik.org/lesson/555/step/2

Step 2 (S-10678) 1.png

[00:00 - 00:14] давайте обсудим каким образом реализуется полиморфизм времени выполнения динамический полиморфизм или полиморфизм с использованием виртуальных для реализации в дамскую полиморфизма


[00:14 - 00:31] таблица виртуальных методов таблица виртуальных государств для каждого полиморфного класса то есть для классов у которых есть виртуальный метод важно отметить что данные таблицы создаются именно для классов они для объектов то есть у всех объектов данного класс будет


[00:31 - 00:48] 1 общая таблица виртуальных метод для того чтобы связать объекты с соответствующим таблицу неправильных методов в объект классов добавляют указателем на таблицу виртуальных методов то есть если у нас в некотором классе


[00:48 - 01:04] были 2 поля name и edge и объекта хранилища данных этих полей то в тот момент когда он в этот класс добавлен виртуальный метод и данных в астане в объекта данного класса будет добавлен


[01:04 - 01:22] указатель на таблицу виртуальных методов это некоторые неявные к нему нельзя получить доступ интересно можно сделать при помощи приведение показателей но для этого надо знать о конкретной реализации виртуальных не так в компиляторе платформе и прочее


[01:22 - 01:38] стандартная арестом это не предполагать но идеологически это так то есть в каждом объекте будет хранится указатель на таблицу виртуальных методов которые соответствуют классу соответственно всех производных классов от данного


[01:38 - 01:53] этот указателем таблицу также будет присутствовать например если у нас есть некоторые производные класс будем тут класса петерсон то в начале объекты этого класса присутствует все данные объекты типа


[01:53 - 02:08] то что то есть соответствующий экземпляру а класса просто и в том числе указатель на таблицу виртуальных методов соответственно если мы общаемся с


[02:08 - 02:25] такими объектами через указатель на базовый класс то вне зависимости от того указывает указатель на базовый класс производный указателем таблицу это все находится в 1 и том же месте но обычно это в самом начале объект


[02:25 - 02:44] при вызове виртуального метода вызов происходит не по адресу как был бы в случае с обычными да то есть при вызове обычного метода в момент компиляции вместо вызова будет подставлен адрес конкретного метода который есть нужно вызвать отличие от этого во при вызове метода


[02:44 - 02:59] вот то место где метод вызывается представляет адрес номер в таблице виртуальных например если мы вызываем некоторых виртуальный метод то вместо вызова


[02:59 - 03:17] методы будет подставлен номер это методы в таблицу например если номера методы в таблице 1 то вот такой вызов он будет соответствовать вызову некоторого метода адрес с которого хранится в таблице на который указывает этот неявный


[03:17 - 03:36] член данных объектов типа прошлым летом мы просто обращаемся к этой таблице к элементу метод по адресу который там кажется таким образом мы достигаем


[03:36 - 03:52] динамического полиморфизма то есть если у нас указатель п указывает на объекте потушен то будет вызван метод пышен соответствующие классу что если


[03:52 - 04:07] п указывает на объекте по студиям то будет вызван а не то таки песен которые соответствуют мне то есть вот если бы указывает на какой то другой производные класс от класса прошлом то


[04:07 - 04:22] будет вызван метод соответствующий этому класс данный показатель инициализируется в конструкторе и таким образом происходит неявно таким образом у каждого объекта


[04:22 - 04:33] класса производного восточном будет этот указатель этот показатель будет проинициализирован адресом соответствующие таблицы