Какво е претоварване на оператора?
Използвайки претоварване на оператора в C ++, можете да посочите повече от едно значение за оператор в един обхват. Целта на претоварването на оператора е да предостави специално значение на оператор за дефиниран от потребителя тип данни.
С помощта на претоварване на оператора можете да предефинирате повечето оператори на C ++. Можете също да използвате претоварване на оператора, за да извършвате различни операции с помощта на един оператор.
В този урок за C ++ ще научите:
- Какво е претоварване на оператора?
- Синтаксис
- Различни подходи към претоварване на оператора в C ++
- Могат ли всички оператори на C ++ да бъдат претоварени?
- Неща, които трябва да запомните:
- Правила за претоварване на оператора:
- Как да претоварите оператора:
Синтаксис
За да претоварите оператор C ++, трябва да дефинирате специална функция вътре в класа, както следва:
class class_name{… publicreturn_type operator symbol (argument(s)){… }… };
Ето обяснение за горния синтаксис:
- Return_type е типът на връщане за функцията.
- След това споменавате ключовата дума оператор.
- Символът означава символа на оператора, който трябва да бъде претоварен. Например, +, -, <, ++.
- Аргументите могат да бъдат предадени на функцията на оператора по същия начин като функциите.
Пример 1:
#includeusing 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.
- Използвайте модификатора за частен достъп, който маркира член на класа като частно достъпен.
- Създайте брой на целочислена променлива. Тази променлива ще бъде частно достъпна.
- Използвайте модификатора за публичен достъп, който маркира член на класа като частно достъпен.
- Използвайте конструктор на клас, за да инициализирате брояча на променливите на 5.
- Претоварете значението на оператора -.
- Операторът ще намали стойността на променливата x с 1.
- Край на секцията за претоварване на оператора. Операторът получи ново име.
- Дефиниране на функция с име Display () функция.
- Отпечатайте стойността на броя променливи заедно с друг текст на конзолата, когато е извикана функцията Display (). The} маркира края на тялото на функцията Display ().
- Край на тялото на класа.
- Извикайте функцията main (). В тази функция трябва да се добави програмната логика.
- Създайте екземпляр на класа TestClass и му дайте името tc.
- Това ще извика функцията void operator - ().
- Използвайте стойката на TestClass Class, за да извикате функцията Display ().
- Функцията трябва да върне стойност при успешно завършване.
- Край на тялото на функцията main ().
Различни подходи към претоварване на оператора в C ++
Можете да извършите претоварване на оператора, като внедрите някой от следните типове функции:
- Членска функция
- Функция, която не е член
- Приятелска функция
- Функцията за претоварване на оператора може да бъде функция член, когато левият операнд е обект на Класа.
- Когато левият операнд е различен, функцията за претоварване на оператора трябва да е функция, която не е член.
Можете да направите функцията за претоварване на оператора приятелска функция, ако има нужда от достъп до частните и защитени членове на класа.
Могат ли всички оператори на C ++ да бъдат претоварени?
Не. Има оператори C ++, които не могат да бъдат претоварени.
Те включват:
- :: -Оператор за разделителна способност
- ?: -венерен оператор.
- . -член селектор
- Sizeof оператор
- * селектор на указател на член
Неща, които трябва да запомните:
- С претоварване на оператора можете да предефинирате начина, по който операторът работи само за дефинираните от потребителя типове (обекти, структури). Не можете да го използвате за вградени типове (float, char, int и т.н.).
- Операторите = и & C ++ са претоварени по подразбиране. Например можете да копирате обектите от същия клас директно с помощта на оператора =.
- Приоритетът на оператора не променя асоциативно и предимството на операторите. Можете обаче да промените реда на оценяване, като използвате скоби.
- Има четири оператора, които не можете да претоварите в C ++. Те включват оператор за разделителна способност на обхвата (: :), оператор за избор на член (.), Избор на член чрез указател към функционален оператор (. *) И троичен оператор (? :).
Правила за претоварване на оператора:
Ето правила за претоварване на оператора:
- За да работи, поне един операнд трябва да бъде дефиниран от потребителя обект на клас.
- Можете да претоварите само съществуващи оператори. Не можете да претоварвате нови оператори.
- Някои оператори не могат да бъдат претоварени с помощта на приятелска функция. Такива оператори обаче могат да бъдат претоварени с помощта на член-функция.
Как да претоварите оператора:
Пример 1:
#includeusing 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:
#includeusing 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.
- Инициализирайте стойността на променливата над.
- Край на тялото на конструктора.
- Заменете значението на оператора +.
- Създайте резултата от типа данни от тип TestClass.
- Използвайте оператора + с комплексни числа. Този ред ще добави реалната част на число към реалната част на друго число.
- Използвайте оператора + с комплексни числа. Този ред ще добави въображаемата част от число към въображаемата част на друго число.
- Програмата ще върне стойността на резултата от променливата при успешно изпълнение.
- Край на дефиницията на новото значение на + оператор, т.е. претоварване.
- Извикайте метода print ().
- Отпечатайте новия комплексен номер след добавяне на конзолата.
- Край на функцията на тялото на print ().
- Край на тялото на TestClass Class.
- Извикване на функцията main ().
- Предаване на стойностите на реални и сложни части, които трябва да бъдат добавени. Първата част на c1 ще бъде добавена към първата част на c2, т.е. 9 + 4. Втората част на c1 ще бъде добавена към втората част на c, т.е. 5 + 3.
- Извършване на операция с помощта на претоварения + оператор и съхраняване на резултата в променлива c3.
- Отпечатване на стойността на променлива c3 на конзолата.
- Край на тялото на main () функция.
Резюме:
- Можете да посочите повече от едно значение за оператор C ++ в един обхват.
- Това се нарича претоварване на оператора.
- Претоварването на оператора предоставя специално значение на оператор за дефиниран от потребителя тип данни.
- Можете да предефинирате повечето оператори на C ++ чрез претоварване на оператора.
- Не всички оператори на C ++ могат да бъдат претоварени.
- За да бъде операторът претоварен, поне един от операндите трябва да бъде дефиниран от потребителя обект.
- Само съществуващите оператори могат да бъдат претоварени. Не можете да претоварвате нови оператори.