Претоварване на оператор на C ++ с примери

Съдържание:

Anonim

Какво е претоварване на оператора?

Използвайки претоварване на оператора в C ++, можете да посочите повече от едно значение за оператор в един обхват. Целта на претоварването на оператора е да предостави специално значение на оператор за дефиниран от потребителя тип данни.

С помощта на претоварване на оператора можете да предефинирате повечето оператори на C ++. Можете също да използвате претоварване на оператора, за да извършвате различни операции с помощта на един оператор.

В този урок за C ++ ще научите:

  • Какво е претоварване на оператора?
  • Синтаксис
  • Различни подходи към претоварване на оператора в C ++
  • Могат ли всички оператори на C ++ да бъдат претоварени?
  • Неща, които трябва да запомните:
  • Правила за претоварване на оператора:
  • Как да претоварите оператора:

Синтаксис

За да претоварите оператор C ++, трябва да дефинирате специална функция вътре в класа, както следва:

class class_name{… publicreturn_type operator symbol (argument(s)){… }… };

Ето обяснение за горния синтаксис:

  • Return_type е типът на връщане за функцията.
  • След това споменавате ключовата дума оператор.
  • Символът означава символа на оператора, който трябва да бъде претоварен. Например, +, -, <, ++.
  • Аргументите могат да бъдат предадени на функцията на оператора по същия начин като функциите.

Пример 1:

#include 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;}

Изход:

Ето екранна снимка на кода:

Обяснение на кода:

  1. Включване на заглавния файл на iostream в нашия код, за да се използват неговите функции.
  2. Включете std пространството от имена в нашата програма, за да използвате неговите класове, без да го извиквате.
  3. Създайте клас с име TestClass.
  4. Използвайте модификатора за частен достъп, който маркира член на класа като частно достъпен.
  5. Създайте брой на целочислена променлива. Тази променлива ще бъде частно достъпна.
  6. Използвайте модификатора за публичен достъп, който маркира член на класа като частно достъпен.
  7. Използвайте конструктор на клас, за да инициализирате брояча на променливите на 5.
  8. Претоварете значението на оператора -.
  9. Операторът ще намали стойността на променливата x с 1.
  10. Край на секцията за претоварване на оператора. Операторът получи ново име.
  11. Дефиниране на функция с име Display () функция.
  12. Отпечатайте стойността на броя променливи заедно с друг текст на конзолата, когато е извикана функцията Display (). The} маркира края на тялото на функцията Display ().
  13. Край на тялото на класа.
  14. Извикайте функцията main (). В тази функция трябва да се добави програмната логика.
  15. Създайте екземпляр на класа TestClass и му дайте името tc.
  16. Това ще извика функцията void operator - ().
  17. Използвайте стойката на TestClass Class, за да извикате функцията Display ().
  18. Функцията трябва да върне стойност при успешно завършване.
  19. Край на тялото на функцията main ().

Различни подходи към претоварване на оператора в C ++

Можете да извършите претоварване на оператора, като внедрите някой от следните типове функции:

  1. Членска функция
  2. Функция, която не е член
  3. Приятелска функция
  • Функцията за претоварване на оператора може да бъде функция член, когато левият операнд е обект на Класа.
  • Когато левият операнд е различен, функцията за претоварване на оператора трябва да е функция, която не е член.

Можете да направите функцията за претоварване на оператора приятелска функция, ако има нужда от достъп до частните и защитени членове на класа.

Могат ли всички оператори на C ++ да бъдат претоварени?

Не. Има оператори C ++, които не могат да бъдат претоварени.

Те включват:

  • :: -Оператор за разделителна способност
  • ?: -венерен оператор.
  • . -член селектор
  • Sizeof оператор
  • * селектор на указател на член

Неща, които трябва да запомните:

  1. С претоварване на оператора можете да предефинирате начина, по който операторът работи само за дефинираните от потребителя типове (обекти, структури). Не можете да го използвате за вградени типове (float, char, int и т.н.).
  2. Операторите = и & C ++ са претоварени по подразбиране. Например можете да копирате обектите от същия клас директно с помощта на оператора =.
  3. Приоритетът на оператора не променя асоциативно и предимството на операторите. Можете обаче да промените реда на оценяване, като използвате скоби.
  4. Има четири оператора, които не можете да претоварите в C ++. Те включват оператор за разделителна способност на обхвата (: :), оператор за избор на член (.), Избор на член чрез указател към функционален оператор (. *) И троичен оператор (? :).

Правила за претоварване на оператора:

Ето правила за претоварване на оператора:

  • За да работи, поне един операнд трябва да бъде дефиниран от потребителя обект на клас.
  • Можете да претоварите само съществуващи оператори. Не можете да претоварвате нови оператори.
  • Някои оператори не могат да бъдат претоварени с помощта на приятелска функция. Такива оператори обаче могат да бъдат претоварени с помощта на член-функция.

Как да претоварите оператора:

Пример 1:

#include 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;}

Изход:

Ето екранна снимка на кода:

Обяснение на кода:

  1. Включване на заглавния файл на iostream в нашия код, за да се използват неговите функции.
  2. Включете std пространството от имена в нашата програма, за да използвате неговите класове, без да го извиквате.
  3. Създайте клас с име OperatorOverload.
  4. Използвайте модификатора за частен достъп, който маркира член на класа като частно достъпен.
  5. Създайте цяло число променлива x. Тази променлива ще бъде частно достъпна.
  6. Използвайте модификатора за публичен достъп, който маркира член на класа като частно достъпен.
  7. Използвайте конструктор на клас, за да инициализирате променлива x до 10.
  8. Претоварете значението на оператора ++.
  9. Операторът ще увеличи стойността на променлива x с 2.
  10. Край на секцията за претоварване на оператора. Операторът получи ново име.
  11. Извикване на функцията Print ().
  12. Отпечатайте стойността на променлива x заедно с друг текст на конзолата при извикване на функцията Print ().
  13. Край на тялото на функцията Print ().
  14. Край на тялото на класа.
  15. Извикайте функцията main (). В тази функция трябва да се добави програмната логика.
  16. Създайте екземпляр на клас OperatorOverload с име ov.
  17. Това ще извика функцията void operator ++ ().
  18. Използвайте стойката на класа OperatorOverload, за да извикате функцията Print ().
  19. Функцията трябва да върне стойност при успешно завършване.
  20. Край на тялото на функцията 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();}

Изход:

Ето екранна снимка на кода:

Обяснение на кода:

  1. Включване на заглавния файл на iostream в нашата програма, за да се използват неговите функции.
  2. Включете std пространството от имена в нашата програма, за да използвате класовете му, без да го извиквате.
  3. Създайте клас с име TestClass. {Отбелязва началото на тялото на класа.
  4. Използвайте модификатора за частен достъп, за да маркирате променливите като частни, което означава, че те могат да бъдат достъпни само от Класа.
  5. Определете две целочислени променливи, реална и над.
  6. Използвайте модификатора на публичния достъп, за да маркирате конструктора като публичен, което означава, че той ще бъде достъпен дори извън Класа.
  7. Създаване на конструктора на класа и инициализиране на променливите.
  8. Инициализирайте стойността на променливата real.
  9. Инициализирайте стойността на променливата над.
  10. Край на тялото на конструктора.
  11. Заменете значението на оператора +.
  12. Създайте резултата от типа данни от тип TestClass.
  13. Използвайте оператора + с комплексни числа. Този ред ще добави реалната част на число към реалната част на друго число.
  14. Използвайте оператора + с комплексни числа. Този ред ще добави въображаемата част от число към въображаемата част на друго число.
  15. Програмата ще върне стойността на резултата от променливата при успешно изпълнение.
  16. Край на дефиницията на новото значение на + оператор, т.е. претоварване.
  17. Извикайте метода print ().
  18. Отпечатайте новия комплексен номер след добавяне на конзолата.
  19. Край на функцията на тялото на print ().
  20. Край на тялото на TestClass Class.
  21. Извикване на функцията main ().
  22. Предаване на стойностите на реални и сложни части, които трябва да бъдат добавени. Първата част на c1 ще бъде добавена към първата част на c2, т.е. 9 + 4. Втората част на c1 ще бъде добавена към втората част на c, т.е. 5 + 3.
  23. Извършване на операция с помощта на претоварения + оператор и съхраняване на резултата в променлива c3.
  24. Отпечатване на стойността на променлива c3 на конзолата.
  25. Край на тялото на main () функция.

Резюме:

  • Можете да посочите повече от едно значение за оператор C ++ в един обхват.
  • Това се нарича претоварване на оператора.
  • Претоварването на оператора предоставя специално значение на оператор за дефиниран от потребителя тип данни.
  • Можете да предефинирате повечето оператори на C ++ чрез претоварване на оператора.
  • Не всички оператори на C ++ могат да бъдат претоварени.
  • За да бъде операторът претоварен, поне един от операндите трябва да бъде дефиниран от потребителя обект.
  • Само съществуващите оператори могат да бъдат претоварени. Не можете да претоварвате нови оператори.