Преоптерећење оператора Ц ++ примерима

Преглед садржаја:

Anonim

Шта је преоптерећење оператора?

Користећи преоптерећење оператора у Ц ++-у, можете одредити више значења за оператора у једном опсегу. Сврха преоптерећења оператора је да пружи посебно значење оператора за кориснички дефинисани тип података.

Уз помоћ преоптерећења оператора можете редефинисати већину оператора Ц ++. Такође можете да користите преоптерећење оператера за обављање различитих операција помоћу једног оператора.

У овом упутству за Ц ++ научићете:

  • Шта је преоптерећење оператора?
  • Синтакса
  • Различити приступи преоптерећењу оператора у Ц ++
  • Могу ли се сви Ц ++ оператори преоптеретити?
  • Ствари које треба запамтити:
  • Правила за преоптерећење оператера:
  • Како преоптеретити оператора:

Синтакса

Да бисте преоптеретили Ц ++ оператора, требало би да дефинишете посебну функцију унутар Класе на следећи начин:

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

Ево објашњења за горњу синтаксу:

  • Ретурн_типе је тип повратка за функцију.
  • Даље, помињете кључну реч оператор.
  • Симбол означава оперативни симбол који треба преоптеретити. На пример, +, -, <, ++.
  • Аргументи се могу пренети у функцију оператора на исти начин као и функције.

Пример 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. Укључивање датотеке заглавља иостреам у наш код за коришћење његових функција.
  2. Укључите стд простор имена у наш програм да користи његове класе без позива.
  3. Направите класу под називом ТестЦласс.
  4. Користите модификатор приватног приступа који члана класе означава као приватно доступан.
  5. Направите број целобројне променљиве. Ова променљива ће бити приватно доступна.
  6. Користите модификатор јавног приступа који члана класе означава као приватно доступан.
  7. Користите конструктор класе да иницијализујете бројач променљивих на 5.
  8. Преоптерети значење оператора.
  9. Оператор ће вредност променљиве к умањити за 1.
  10. Крај одељка за преоптерећење оператера. Оператор је добио ново име.
  11. Дефинисање функције под називом Дисплаи () функција.
  12. Исписати вредност броја променљивих уз други текст на конзоли када је позвана функција Дисплаи (). }} Означава крај тела функције Дисплаи ().
  13. Крај предавања.
  14. Позовите главну () функцију. У ову функцију треба додати програмску логику.
  15. Направите инстанцу класе ТестЦласс и дајте јој име тц.
  16. Ово ће позвати функцију воид оператор - ().
  17. Користите став класе ТестЦласс да бисте позвали функцију Дисплаи ().
  18. Функција мора вратити вредност након успешног завршетка.
  19. Крај тела функције маин ().

Различити приступи преоптерећењу оператора у Ц ++

Преоптерећење оператора можете извршити применом било које од следећих врста функција:

  1. Функција члана
  2. Функција нечлана
  3. Функција пријатеља
  • Функција преоптерећења оператора може бити функција члана када је Леви операнд објекат Класе.
  • Када се леви операнд разликује, функција преоптерећења оператора треба да буде функција која није члан.

Функцију преоптерећења оператора можете учинити функцијом пријатеља ако треба да приступи приватном и заштићеном члану класе.

Могу ли се сви Ц ++ оператори преоптеретити?

Не. Постоје оператори Ц ++ који се не могу преоптеретити.

То укључује:

  • :: -Оператор резолуције опсега
  • ?: -тернарни оператор.
  • . -селектор за чланове
  • Сизеоф оператор
  • * -члан селектора показивача

Ствари које треба запамтити:

  1. Са преоптерећењем оператора, можете редефинисати начин на који оператер ради само за типове које дефинише корисник (објекти, структуре). Не можете га користити за уграђене типове (флоат, цхар, инт, итд.).
  2. Оператери = и & Ц ++ су подразумевано преоптерећени. На пример, објекте исте класе можете директно копирати помоћу оператора =.
  3. Приоритет оператора не мења асоцијативно и приоритет оператора. Међутим, редослед оцењивања можете променити помоћу заграде.
  4. Постоје четири оператора која у Ц ++ не можете преоптеретити. Укључују оператер резолуције опсега (: :), оператор избора члана (.), Избор члана кроз показивач на функцијски оператор (. *) И тернарни оператор (? :).

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

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

  • Да би могао да функционише, најмање један операнд мора бити кориснички дефинисани објект класе.
  • Постојеће операторе можете само преоптеретити. Не можете преоптеретити нове операторе.
  • Неки оператери се не могу преоптеретити помоћу функције пријатеља. Међутим, такви оператори могу бити преоптерећени помоћу функције члана.

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

Пример 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. Укључивање датотеке заглавља иостреам у наш код за коришћење његових функција.
  2. Укључите стд простор имена у наш програм да користи његове класе без позива.
  3. Направите класу под називом ОператорОверлоад.
  4. Користите модификатор приватног приступа који члана класе означава као приватно доступан.
  5. Направите целобројну променљиву к. Ова променљива ће бити приватно доступна.
  6. Користите модификатор јавног приступа који члана класе означава као приватно доступан.
  7. Користите конструктор класе за иницијализацију променљиве к на 10.
  8. Преоптерети значење оператора ++.
  9. Оператор ће повећати вредност променљиве к са 2.
  10. Крај одељка за преоптерећење оператера. Оператор је добио ново име.
  11. Позивање функције Принт ().
  12. Исписати вредност променљиве к заједно са осталим текстом на конзоли када је позвана функција Принт ().
  13. Крај тела функције Принт ().
  14. Крај предавања.
  15. Позовите главну () функцију. У ову функцију треба додати програмску логику.
  16. Креирајте инстанцу класе ОператорОверлоад под називом ов.
  17. Ово ће позвати функцију воид оператор ++ ().
  18. Користите став класе ОператорОверлоад да бисте позвали функцију Принт ().
  19. Функција мора вратити вредност након успешног завршетка.
  20. Крај тела функције маин ().

Пример 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. Укључивање датотеке заглавља иостреам у наш програм како бисмо користили његове функције.
  2. Укључите стд простор имена у наш програм како бисте користили његове класе без позивања.
  3. Направите класу под називом ТестЦласс. Ознака {означава почетак предавања.
  4. Користите модификатор приватног приступа да означите променљиве као приватне, што значи да им се може приступити само из класе.
  5. Дефинишите две целобројне променљиве, реалну и преко.
  6. Користите модификатор јавног приступа да бисте конструктор означили као јавни, што значи да ће бити доступан чак и изван класе.
  7. Креирање конструктора класе и иницијализација променљивих.
  8. Иницијализујте вредност променљиве реал.
  9. Иницијализујте вредност променљиве преко.
  10. Крај тела конструктора.
  11. Замените значење + оператора.
  12. Направите резултат типа података типа ТестЦласс.
  13. Користите оператор + са сложеним бројевима. Овај ред ће додати стварни део броја стварном делу другог броја.
  14. Користите оператор + са сложеним бројевима. Ова линија додаће замишљени део броја замишљеном делу другог броја.
  15. Програм ће вратити вредност променљиве резултата након успешног извршења.
  16. Крај дефиниције новог значења + оператора, односно преоптерећења.
  17. Позовите методу принт ().
  18. Одштампајте нови сложени број након додавања на конзолу.
  19. Крај функције боди оф принт ().
  20. Крај тела класе ТестЦласс.
  21. Позивање главне () функције.
  22. Преношење вредности како стварних тако и сложених делова које треба додати. Први део ц1 биће додат првом делу ц2, односно 9 + 4. Други део ц1 биће додат другом делу ц, односно 5 + 3.
  23. Извођење операције помоћу преоптерећеног + оператора и чување резултата у променљивој ц3.
  24. Штампање вредности променљиве ц3 на конзоли.
  25. Крај тела главне () функције.

Резиме:

  • У једном опсегу можете навести више значења за Ц ++ оператора.
  • То се назива преоптерећење оператера.
  • Преоптерећење оператора пружа посебно значење оператора за кориснички дефинисани тип података.
  • Већину Ц ++ оператора можете редефинисати преко преоптерећења оператора.
  • Не могу се сви Ц ++ оператори преоптеретити.
  • Да би оператор био преоптерећен, најмање један од операнда мора бити кориснички дефинисан објекат.
  • Само постојећи оператори могу бити преоптерећени. Не можете преоптеретити нове операторе.