Step 3 (S-10693)

From Stepik Wiki
Jump to: navigation, search

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

Step 3 (S-10693) 1.png

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


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


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


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


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


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


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


[02:03 - 02:19] этой функции из наследников поэтому если в каком то сетевым устройствам вот например реализую классно роутер на средних классов девайсов мы хотим переопределить функцию send to мы должны будем переопределить ее


[02:19 - 02:35] не имея возможности вызвать ту функцию которую мы унаследовали от базового класса то есть нам придется переопределить полностью всю реализации однако за счет того что функционал им был нигде напрямую не вызывается


[02:35 - 02:53] через публичный интерфейс все равно при вызове функции сам до нее будет вызван всегда мне этот лук который запишет сообщение о том что сейчас отправка данных а после этого


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


[03:10 - 03:29] приватный мы можем ее переопределить в классах наследниках это в принципе вполне разумное поведение в некоторых случаях если мы хотим запретить нашим наследником использовать унаследованную реализацию некто виртуальной функцию


[03:29 - 03:35] однако если они хотят они могут я переопределить ну в этом случае даже не переопределить я полностью с 0