Difference between revisions of "Step 6 (S-11059)"
(Create page for step id=11059) |
|||
Line 1: | Line 1: | ||
Step on Stepik: https://stepik.org/lesson/558/step/6 | Step on Stepik: https://stepik.org/lesson/558/step/6 | ||
− | + | [[File:Step_6_(S-11059)_1.png|border|800px]] | |
[00:00 - 00:15] для перегрузки операторов инкремента декремента используется специальный синтаксис дело в том что данный оператор присутствует в 2 формах в префиксный давайте рассмотрим на примере пусть мы определяем некоторой числовой класс данном случае | [00:00 - 00:15] для перегрузки операторов инкремента декремента используется специальный синтаксис дело в том что данный оператор присутствует в 2 формах в префиксный давайте рассмотрим на примере пусть мы определяем некоторой числовой класс данном случае |
Latest revision as of 12:52, 7 August 2017
Step on Stepik: https://stepik.org/lesson/558/step/6
[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] вот поэтому важно в тех местах где вам не нужен постфиксный + + писать префиксы таким образом вы избежите ненужных накладных расходов