Step 5 (S-10663)

From Stepik Wiki
Revision as of 12:37, 7 August 2017 by Admin (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Step on Stepik: https://stepik.org/lesson/552/step/5

Step 5 (S-10663) 1.png

[00:00 - 00:15] производные классы связаны со своими базами то есть родительскими классами при помощи привидений для ссылок и указатель на объект то производного класса определены приведение к соответственно указателям ссылкам на объекты базовых классов


[00:15 - 00:35] так если у нас есть переменная производного класса нашем случае это переменная типа стьюдента то мы можем создать ссылку базовым классом то есть ссылку на объекте и проанализировать ее ссылкой на


[00:35 - 00:53] перемена производного при этом будет произведено привидение вот ссылки на производный класс к ссылке на базовый класс аналогично мы можем создать указателя типа person то есть указатель на


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


[01:08 - 01:24] производный класс к указателю на базовый класс а в обратную сторону такие при введении работы то есть нельзя взять указатель на прошлом и автоматически перевести его к указателю настигнут то есть это не работает не для указателей


[01:24 - 01:39] не для ссылок благодаря 1 привидение когда приведение ссылок от производного класса на базовый класс можно инициализировать


[01:39 - 01:57] объекты базовых класса при помощи объектов производного класса то есть если у нас есть значение производного класса значение класса student мы можем создать значение класса должен и принято реагировать его


[01:57 - 02:13] значением класса аналогично можем не только инициализировать можно просто присваивать warm уже существующей переменной типа прошлом присвоить значение типа при этом в это значение


[02:13 - 02:30] типа прошлом будут скопированы соответствующие поля из объекта класса то есть в данном случае поля класса student которые унаследованы от класса на то поле name и поле h


[02:30 - 02:47] имя и возраст значения этих полей будет скопировано в соответствующий экземпляр класса петерсон заметим что поле соответствующее имени университета скопировано не будет


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


[03:04 - 03:20] дело в том что у нас есть приведение от ссылке на производные класс к ссылке на базовый класс поэтому в данной строчке просто вызывается конструктор копирования для класса петерсон который имеет


[03:20 - 03:40] следующая сигнатура то есть это конструктор который принимает в качестве параметра ссылку на объект типа и в качестве этой ссылки на объекте по прошлому то подсовываем ссылку на объекте поэтому вызывается просто обычный конструктор копирования который


[03:40 - 03:55] копировать поля имя и возраст а просто чтобы не поле июня он не знает как этот конструктор просто конструктор из класса петерсон там никакой университета


[03:55 - 04:10] поэтому нужно быть очень аккуратным когда мы пытаемся копировать значения производных классов при помощи ссылок на значение