Step 7 (S-11065)

From Stepik Wiki
Jump to: navigation, search

Step on Stepik: https://stepik.org/lesson/559/step/7

Step 7 (S-11065) 1.png

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


Step 7 (S-11065) 2.png

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


Step 7 (S-11065) 3.png

[00:34 - 00:51] да конечно если ваша задача запутать его то тут у вас большое пространство для работ однако если вы хотите написать код в котором будет удобно и просто работать то конечно стоит соблюдать


Step 7 (S-11065) 4.png

Step 7 (S-11065) 5.png

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


Step 7 (S-11065) 6.png

Step 7 (S-11065) 7.png

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


Step 7 (S-11065) 8.png

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


Step 7 (S-11065) 9.png

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


Step 7 (S-11065) 10.png

Step 7 (S-11065) 11.png

[01:54 - 02:09] давайте реально очень примере пусть мы для нашего класса вектор определим оператора сложение умножение сложение умножение скалярное и еще добавить оператор векторного умножения


Step 7 (S-11065) 12.png

Step 7 (S-11065) 13.png

[02:09 - 02:23] ну так как у нас только 1 оператор нажать вот такой на другой оператор и будем считать что это кратер сдают векторного умножения например оператор xor то есть отвечающего и


Step 7 (S-11065) 14.png

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


Step 7 (S-11065) 15.png

[02:39 - 02:57] нам никто не гарантирует что ваши представления математическое об операторе вектор ношении она будет соответствовать приоритет операторов который задан синтаксический для встроенных оператора все + + есть вопрос о том


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


Step 7 (S-11065) 16.png

Step 7 (S-11065) 17.png

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


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


Step 7 (S-11065) 18.png

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


Step 7 (S-11065) 19.png

[04:03 - 04:18] пользовательских типов при этом важно чтобы хотя бы 1 аргумент вашего оператора был пользовательский нельзя пытаться переводить оператор + для intel и w так и було


Step 7 (S-11065) 20.png

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


[04:34 - 04:51] на этом поле меня все что хотел сказать про перегрузку операторов отдельных вопросов вставить перегрузка операторов выделения памяти ну так как она связана с разговор о том как правильно реализовывать правление понять


[04:51 - 05:02] отдельный большой вопрос про то разумно если вам интересно почитать какую то книжку а синтаксически никаких сложностей нет