Step 6 (S-11059)

From Stepik Wiki
Jump to: navigation, search

Step on Stepik: https://stepik.org/lesson/558/step/6

Step 6 (S-11059) 1.png

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


[00:15 - 00:35] сигнал для которого естественно определить оператора инкремент так оператору инкремента является ударным операторам то мы можем определить одинарный оператор при помощи метода соответствующим именем + + от 0 аргумент так как


[00:35 - 00:51] операторами таким образом можно перегрузить оператор + + и это будет соответствовать перегрузки префикс на оператора + + то есть тому оператору который вызывается с мы напишем + + а


[00:51 - 01:10] заметим что для таких операторов разумно возвращать ссылку на текущий объект то есть так же как мы это делали в операторе плясать если теперь мы захотим перегрузить оператор + +


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


[01:29 - 01:47] не используется то есть даже я при определении этого оператора не указал имя это формально ну просто потому что меня не как использовать нам важно только то что у данного оператора + + есть параметр типа отличие от


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


[02:03 - 02:18] post версию оператор которая соответствует вызовам а + + для того чтобы postfix не оператор вел себя таким же образом как он ведет себя для встроенных цветовых типов дайте на помню как то работы


[02:18 - 02:33] если а равняется 10 а дальше я напишу б равняется а + + то в данном случае после окончания этой строчке


[02:33 - 02:49] б будет равен 10 а а будет равен 11 то есть в б вернется значения от до инкремент для того чтобы наш оператор


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


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


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


[03:42 - 04:01] вот в этой строчке у нас а станет равным 11 а вернем мы 10 таким образом мы получим поведение которое соответствует поведению post текста оператору инкремента для встроенных


[04:01 - 04:16] важно отметить что в отличие от префиксного оператора в котором в значении по ссылке в после этого оператор значение зачете по значению потому что мы здесь возвращаем


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


[04:34 - 04:48] post инкремент в общем случае не легче чем оператор префиксного а в некоторых и сложнее дело в том что в естественной реализации


[04:48 - 05:06] после этого оператора нам всегда нужно назвать префиксный и кроме этого еще и создавать копию то есть вот эти строчки они будут добавлены мы здесь создаем копию здесь я возвращаю при этом происходят еще 1 копирование то есть вызов после этого оператора + + он


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


[05:23 - 05:37] вот поэтому важно в тех местах где вам не нужен постфиксный + + писать префиксы таким образом вы избежите ненужных накладных расходов