Претоварването на 49 и оператори в гр
Добър ден, скъпи читатели!
Когато започнах с изучаване на C ++, имах много въпроси, които понякога не са в състояние бързо да се намерят отговорите. Не е изключение и такава тема като натоварването на оператори. Сега, аз разбирам в тази тема, искам да помогне на другите да Магия.
Каква е претоварване?
Да предположим, че създавате вашия клас или структура, тя трябва да бъде описан от вектор в 3-мерно пространство:
Сега, вие създавате 3 обекти на тази структура:
И вие искате prirovnyat обект обект v2 v1, напишете:
Всичко работи, но един пример за вектор е много опростена, може би имате такава структура, в която не трябва сляпо копиране на всички стойности от един обект на друг (както е по подразбиране), и да ги направи някои манипулации. Например, не копирайте последните Z. Когато програмата не знае за това? Тя се нуждае от ясни инструкции, които ще изпълняват.
Ето защо, ние трябва да се претоварва оператора за присвояване (=).
Обща информация за натоварването на оператори
За да направите това, ние добавяме в нашата структура от претоварване:
Сега, в горния код, ние сме уточни, че задачата, която искате да копирате променливите х и у. и Z нула.
Но този трансфер е далеч от съвършенство, нека си представим, че нашата структура съдържа не три променливи от тип Int, както и много други категории обекти, в този случай, тази опция претоварване ще работи доста бавно.
- Първото нещо, което можем да направим, е да предаде на метода на претоварване не е целият обект, както и препратка към мястото, където се съхранява:
Минавайки обект чрез препратка. не съществува разпределение за обекта (да речем, 128 байта) и операцията за копиране, паметта се разпределят само за указател към клетка на паметта, с която работим, и то е около 4-8 байта. По този начин една работа с предмет на линията.
например:
Разбира се, едва ли някой нормален човек няма да доведе до такава очевидна манипулация. И все пак, за да бъдат безопасни, дори и премахване на възможността за такава промяна.
За да направите това, ние просто трябва да се добави, точно преди да вземе Конст аргумент, така че ние се отбележи, че методът не може да бъде променяно в обекта.
Но, когато се връщат чрез препратка, може да се появи някои проблеми.
Ние не пиша този израз: v1 = (v2 + v3);
Малко отклонение на възвръщаемостта:
Когато учех претоварване, което не разбирам:
Фактът, че всички операции трябва да се индивидуална и изрично в тялото на метода. Какво означава да се напише: това-> х = v.x т.н.
Но защо тогава се върне, ние се върнете? В действителност, завръщане в този пример играе по-скоро формална роля, ние можем и без него:
И този код е доста работа. защото Всичко, което трябва да направим, посочи в тялото на метода.
Но в този случай ние не се получи да се направи такъв запис:
Retreat 2 (не е необходимо да се направи):
Сега, че знаете връщането на работа разлика и ръководи дейността, ние можем да напишете следния код:
За да се реализира ужаса ние определяме претоварване, както следва:
За да направите това, добавете това състояние:
Различията между едноместно и бинарни оператори
Едноместно оператори - това са операторите, който се активира само един обект, за които се прилагат на всички промени
Binary оператори - работещи с 2 обекти
Претоварване в тялото и тялото на класа
Защо в оператор претоварване приятелски функции (приятел)?
Когато не може да разчита на приятелски функции в натоварването на оператори?
Се появява грешка, поради следната причина, структурата Vector2 сме претоварени от + оператор, който като стойността на правото отнема тип Vector3, така че първият вариант работи. Но във втория случай, трябва да пиша, за да претовари вече Vector3 структура, а не 2. За да не се получи в изпълнението на клас Vector3, можем да напишем лесен за употреба функция:
Примери претоварване на различните оператори с някои обяснения
Пример претоварване за двоично +, -, *, /,%
Пример претоварване Postfix нарастване и намаляване (Var ++, var--)
Пример претоварване префикс форми нарастване и намаляване (++ Var, --var)
Претоварването аритметични операции с обекти от други класове,
Претоварване унарна плюс (+)
Претоварване унарна минус (-)
Пример операции присвояване претоварване съединение + = - =, =, / =,% =
Един добър пример за операторите за сравнение == претоварване. =,>, <,>= <=
Пример операции претоварване освободи от стереотипа (тип)
Пример претовари логически оператори. , ||
Пример претоварване Побитови оператори
Пример задача претоварване побитова съединение =, | =, ^ =, <<=,>> =
Един пример на оператор претоварване с работа указатели, и членове на класа [] () *, -> -> *
Не виждам причина да се претовари (* -> -> *), така че примерите по-долу няма.
Как да се претовари нов и изтриване. примери:
Оператор Претоварването запетая,
Внимание! Да не се бърка с трансферите Операторът запетая зодиакалните! (Vector3 var1, var2)