Step 5 (S-10692)

From Stepik Wiki
Revision as of 09:54, 20 March 2017 by Admin (Talk | contribs) (Create page for step id=10692)

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

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

<img width="50%" src="https://ucarecdn.com/89f7e971-e8ae-42eb-bf27-30480a274111/">

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


[00:16 - 00:34] и все это не касается деструкторов destructor хоть может быть чистым виртуальным но у него обязана быть реализации дело в том что деструктор производного класса всегда в конце вызывать деструктор базового класса этого этого базовым классом не определим какой то реализации деструктор то у нас произойдет ошибка компиляции


[00:34 - 00:50] на данном слайде я привел 2 примера interface интерфейс i конвертик букву названия значит это интерфейс это просто некоторые соглашение об именовании такой то не смогли поддержать


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


<img width="50%" src="https://ucarecdn.com/d8392101-388b-4e2a-aa27-83ee15674b55/">

<img width="50%" src="https://ucarecdn.com/a9a9490c-8972-403c-9280-8f6b6c2e89f0/">

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


<img width="50%" src="https://ucarecdn.com/3f108c32-310d-43dd-8e05-e42598714771/">

<img width="50%" src="https://ucarecdn.com/8ee606ac-917b-4cfc-a170-267b2aadce6d/">

[01:25 - 01:40] копировать то есть дать такие класс могли бы реализовать себя метод который возвращает указатель на новую копию по указателю собственно на


<img width="50%" src="https://ucarecdn.com/60624846-ef7a-4bce-af0a-988c38f1fa3a/">

[01:40 - 01:55] интерфейса иконок то есть мы не знаем какой конкретный тип то поэтому указатель лежит но мы можем внутри реализации этого метода создать копию объекта и вернуть его показательно например такой


<img width="50%" src="https://ucarecdn.com/f27c6813-46c2-46e3-9105-5cdc62be667a/">

<img width="50%" src="https://ucarecdn.com/64073fb4-4d6c-45ce-98ff-99610d729526/">

[01:55 - 02:11] интерфейс могут поддержать класс трошин можно было бы в реализации этого метода com создать копию человека


<img width="50%" src="https://ucarecdn.com/b22209ca-d97e-407a-a344-cceb49a218ee/">

[02:11 - 02:26] при помощи оператора new динамической памяти и скопировать и помощью конструктора в конструктор копирования мы передадим ссылку на текущий момент не вернешь


<img width="50%" src="https://ucarecdn.com/26cf8b28-c18e-4cae-8b16-cb45a2b49529/">

[02:26 - 02:42] заметим что + тут позволяет в качестве указателя при реализации таких методов в пригодны классов указывать указатель на производные типа то есть то что здесь в сигнатуре мы ожидаем


[02:42 - 03:01] указатель на базовый класс в производном классе мы можем вернуть указатель на произвольный класса я здесь при этот преобразования значит отличие интерфейса от абстрактного класса заключается в том что интерфейс задает


<img width="50%" src="https://ucarecdn.com/cc81fffd-ddd8-45b3-9d50-ba438b9f97a2/">

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


<img width="50%" src="https://ucarecdn.com/4738cf96-37d1-4cb2-9d56-e772c4e61c5d/">