C++ Operator Претоварване с примери
Какво е Operator Претоварване?
Използването на претоварване на оператора in C++, можете да посочите повече от едно значение за оператор в един обхват. Целта на претоварването на оператора е да предостави специално значение на оператор за дефиниран от потребителя тип данни.
С помощта на претоварването на оператора можете да предефинирате по-голямата част от C++ оператори. Можете също да използвате претоварване на оператори, за да извършвате различни операции с помощта на един оператор.
Синтаксис
За да претоварите a C++ оператор, трябва да дефинирате специална функция вътре в класа, както следва:
class class_name { ... .. ... public return_type operator symbol (argument(s)) { ... .. ... } ... .. ... };
Ето обяснение на горния синтаксис:
- return_type е върнатият тип за функцията.
- След това споменавате ключовата дума оператор.
- Символът обозначава символа на оператора, който трябва да бъде претоварен. Например +, -, <, ++.
- Аргументът(ите) могат да бъдат предадени на операторната функция по същия начин като функциите.
Пример 1
#include <iostream> using namespace std; class TestClass { private: int count; public: TestClass() : count(5) {} void operator --() { count = count - 3; } void Display() { cout << "Count: " << count; } }; int main() { TestClass tc; --tc; tc.Display(); return 0; }
Изход:
Ето екранна снимка на кода:
Обяснение на кода:
- Включване на заглавния файл на iostream в нашия код, за да използваме неговите функции.
- Включете пространството от имена std в нашата програма, за да използвате неговите класове, без да го извиквате.
- Създайте клас с име TestClass.
- Използвайте модификатора за частен достъп, който маркира член на класа като частно достъпен.
- Създайте целочислена променлива count. Тази променлива ще бъде частно достъпна.
- Използвайте модификатора за публичен достъп, който маркира член на класа като частно достъпен.
- Използвайте конструктор на клас, за да инициализирате брояча на променливата до 5.
- Претоварете значението на оператора —.
- Операторът ще намали стойността на променливата x с 1.
- Край на секцията за претоварване на оператора. Операторът получи ново име.
- Дефиниране на функция с име Display().
- Отпечатайте стойността на броя на променливите заедно с друг текст на конзолата, когато се извика функцията Display(). } маркира края на тялото на функцията Display().
- Край на тялото на класа.
- Извикайте функцията main(). Логиката на програмата трябва да се добави в тази функция.
- Създайте екземпляр на класа TestClass и му дайте името tc.
- Това ще извика функцията void operator –().
- Използвайте позицията на TestClass Class, за да извикате функцията Display().
- Функцията трябва да върне стойност при успешно завършване.
- Край на тялото на функцията main().
Различни подходи към Operator Претоварване в C++
Можете да извършите претоварване на оператора, като внедрите някоя от следните типове функции:
- Членска функция
- Функция, която не е член
- Функция приятел
- Функцията за претоварване на оператора може да бъде функция член, когато ляв операнд е обект на класа.
- Когато левият операнд е различен, Operaфункцията за претоварване на tor трябва да е функция, която не е член.
Можете да направите функцията за претоварване на оператора приятелска функция, ако има нужда от достъп до частните и защитените членове на класа.
Може ли всичко C++ Operaда бъдат претоварени?
Не, има C++ оператори, които не могат да бъдат претоварени.
Те включват:
- :: -Оператор за разрешаване на обхват
- ?: -троичен оператор.
- . - селектор на членове
- Оператор sizeof
- * -селектор на указател на член
Какво трябва да запомните
- С претоварването на оператора можете да предефинирате начина, по който операторът работи само за дефинираните от потребителя типове (обекти, структури). Не можете да го използвате за вградени типове (float, char, int и т.н.).
- = и & C++ операторите са претоварени по подразбиране. Например, можете да копирате обектите от един и същи клас директно с помощта на оператора =.
- Operaприоритетът на tor не променя асоциативността и приоритета на операторите. Можете обаче да промените реда на оценяване, като използвате скоби.
- Има четири оператора, които не можете да претоварвате C++. Те включват оператор за разрешаване на обхват (::), оператор за избор на член (.), избор на член чрез указател към функционален оператор (.*) и троичен оператор (?:).
Правила за Operator Претоварване
Ето правила за Operator Претоварване:
- За да работи, поне един операнд трябва да бъде дефиниран от потребителя клас обект.
- Можете да претоварите само съществуващите оператори. Не можете да претоварвате нови оператори.
- Някои оператори не могат да бъдат претоварени с помощта на функция приятел. Такива оператори обаче могат да бъдат претоварени с помощта на членска функция.
Как да претоварим OperaTor
Пример 1
#include <iostream> using namespace std; class OperatorOverload { private: int x; public: OperatorOverload() : x(10) {} void operator ++() { x = x + 2; } void Print() { cout << "The Count is: " << x; } }; int main() { OperatorOverload ov; ++ov; ov.Print(); return 0; }
Изход:
Ето екранна снимка на кода:
Обяснение на кода:
- Включване на заглавния файл на iostream в нашия код, за да използваме неговите функции.
- Включете пространството от имена std в нашата програма, за да използвате неговите класове, без да го извиквате.
- Създайте клас с име OperatorOverload.
- Използвайте модификатора за частен достъп, който маркира член на класа като частно достъпен.
- Създайте целочислена променлива x. Тази променлива ще бъде частно достъпна.
- Използвайте модификатора за публичен достъп, който маркира член на класа като частно достъпен.
- Използвайте конструктор на клас, за да инициализирате променлива x до 10.
- Претоварете значението на оператора ++.
- Операторът ще увеличи стойността на променливата x с 2.
- Край на секцията за претоварване на оператора. Операторът получи ново име.
- Извикване на функцията Print().
- Отпечатайте стойността на променлива x заедно с друг текст на конзолата, когато се извика функцията Print().
- Край на тялото на функцията Print().
- Край на тялото на класа.
- Извикайте функцията main(). Логиката на програмата трябва да се добави в тази функция.
- Създайте екземпляр на OperatorOverload Клас с име ov.
- Това ще извика функцията void operator ++().
- Използвайте позицията на OperatorOverload клас за извикване на функцията Print().
- Функцията трябва да върне стойност при успешно завършване.
- Край на тялото на функцията main().
Пример 2
#include<iostream> using namespace std; class TestClass { private: int real, over; public: TestClass(int rl = 0, int ov = 0) { real = rl; over = ov; } TestClass operator + (TestClass const &obj) { TestClass result; result.real = real + obj.real; result.over = over + obj.over; return result; } void print() { cout << real << " + i" << over << endl; } }; int main() { TestClass c1(9, 5), c2(4, 3); TestClass c3 = c1 + c2; c3.print(); }
Изход:
Ето екранна снимка на кода:
Обяснение на кода:
- Включване на заглавния файл на iostream в нашата програма, за да използваме неговите функции.
- Включете пространството от имена std в нашата програма, за да използвате неговите класове, без да го извиквате.
- Създайте клас с име TestClass. { отбелязва началото на тялото на класа.
- Използвайте модификатора за частен достъп, за да маркирате променливите като частни, което означава, че те могат да бъдат достъпни само от рамките на класа.
- Дефинирайте две целочислени променливи, real и over.
- Използвайте модификатора за публичен достъп, за да маркирате конструктора като публичен, което означава, че ще бъде достъпен дори извън класа.
- Създаване на конструктор на клас и инициализиране на променливи.
- Инициализирайте стойността на променлива real.
- Инициализирайте стойността на променливата над.
- Край на тялото на конструктора.
- Замени значението на оператора +.
- Създайте резултат от тип данни от тип TestClass.
- Използвайте оператора + с комплексни числа. Този ред ще добави реалната част на число към реалната част на друго число.
- Използвайте оператора + с комплексни числа. Този ред ще добави имагинерната част на число към имагинерната част на друго число.
- Програмата ще върне стойността на променливата резултат при успешно изпълнение.
- Край на дефиницията на новото значение на оператора +, тоест претоварване.
- Извикайте метода print().
- Отпечатайте новото комплексно число след добавяне на конзолата.
- Край на тялото на функцията print().
- Край на тялото на клас TestClass.
- Извикване на функцията main().
- Предаване на стойностите както на реални, така и на комплексни части, които трябва да бъдат добавени. Първата част на c1 ще бъде добавена към първата част на c2, тоест 9+4. Втората част на c1 ще бъде добавена към втората част на c, тоест 5+3.
- Извършване на операция с помощта на претоварения оператор + и съхраняване на резултата в променлива c3.
- Отпечатване на стойността на променлива c3 на конзолата.
- Край на тялото на функцията main().
Oбобщение
- Можете да посочите повече от едно значение за a C++ оператор в един обхват.
- Това се нарича претоварване на оператора.
- Operator overloading предоставя специално значение на оператор за дефиниран от потребителя тип данни.
- Можете да предефинирате по-голямата част от C++ оператори чрез претоварване на оператори.
- Не всички C++ операторите могат да бъдат претоварени.
- За да бъде даден оператор претоварен, поне един от операндите трябва да е обект, дефиниран от потребителя.
- Само съществуващите оператори могат да бъдат претоварени. Не можете да претоварвате нови оператори.