Cum se implementează supraîncărcarea operatorului în c ++?



În acest articol vom analiza un alt concept orientat pe obiecte, care facilitează manipularea operatorului. Vom învăța supraîncărcarea operatorului în C ++.

În acest articol vom explora încă un alt concept orientat pe obiecte care facilitează manipularea operatorului. Asta înseamnă că vom intra în detaliile Operatorului Supraîncărcare în C ++ . Următoarele indicații vor fi tratate în acest articol,

Deci, să începem cu acest articol despre supraîncărcarea operatorului în C ++.





Supraîncărcare în C ++

Dacă creăm doi sau mai mulți membri ai aceleiași clase având același nume, dar diferit ca număr sau tip de parametru, este cunoscut sub numele de supraîncărcare C ++.



În C ++, putem supraîncărca:

  • metode
  • constructori
  • proprietăți indexate

Acest lucru se datorează faptului că acești membri au numai parametri.

Continuăm cu acest articol despre supraîncărcarea operatorului în C ++.



rotund dublu la int java

Tipuri de supraîncărcare în C ++

  • Supraîncărcarea funcției
  • Suprasolicitarea operatorului

Supraîncărcare - Supraîncărcare a operatorului în C ++ - Edureka

Continuăm cu acest articol despre supraîncărcarea operatorului în C ++.

De ce se folosește supraîncărcarea operatorului?

Programele C ++ pot fi scrise fără cunoștința supraîncărcării operatorului. Și atunci, operatorii care operează sunt profund folosiți de programatori pentru a face programul intuitiv. De exemplu,

Putem înlocui codul ca:

calcul = add (divide (a, b), multiplica (a, b))

Pentru ecuație

calcul = (a / b) + (a * b)

Supraîncărcarea operatorului oferă o modalitate simplă și ușoară pentru dezvoltarea de noi definiții pentru majoritatea operatorilor din C ++. Cu suficiente cunoștințe, putem crea aproape un nou limbaj prin utilizarea creativă a funcției și tehnicile de supraîncărcare a operatorului. Putem supraîncărca toți operatorii din C ++, cu excepția următoarelor:
● Operator domeniu (: :)
● Operator dimensiune (Sizeof)
● selector de membri (.)
● selector de pointer membru (*)
● operator ternar (? :)

Sintaxa supraîncărcării operatorului

return_type class_name:: operator op (argument_list) {// body function}

Unde tipul returnat este tipul de valoare returnată de funcție. class_name este numele clasei.

Continuăm cu acest articol despre supraîncărcarea operatorului în C ++.

Implementarea supraîncărcării operatorului în C ++

Funcția operator trebuie să fie fie nestatică (funcție membru), fie funcție prieten pentru a fi supraîncărcată. Funcția de supraîncărcare a operatorului poate fi aplicată unei funcții membre dacă operandul stâng este un obiect al acelei clase, dar dacă operandul stâng este diferit, atunci funcția de supraîncărcare a operatorului trebuie definită ca o funcție nemembră.
Funcția de supraîncărcare a operatorului poate fi făcută funcție de prieten dacă necesită acces la membrii privați și protejați ai clasei. De exemplu, operatorul op este o funcție de operator în care op este operatorul supraîncărcat, iar operatorul este cuvântul cheie. Supraîncărcarea operatorului poate fi realizată prin implementarea unei funcții care poate fi funcție membru, funcție nemembră sau funcție prieten.

Care este diferența dintre funcțiile operatorului și funcțiile normale?

Funcțiile operatorului sunt la fel ca funcțiile normale. Singura diferență este că numele unei funcții operator este întotdeauna cuvânt cheie operator urmat de simbolul operatorului și funcțiile operatorului sunt apelate atunci când este utilizat operatorul corespunzător.

Continuăm cu acest articol despre supraîncărcarea operatorului în C ++.

Tipuri de abordări de supraîncărcare

Supraîncărcarea operatorului se poate face prin utilizarea a trei abordări

  • Supraîncărcare operator unar.
  • Operator binar de supraîncărcare.
  • Supraîncărcare operator binar folosind o funcție prieten.

Continuăm cu acest articol despre supraîncărcarea operatorului în C ++.

Suprasolicitarea operatorului unar

Să considerăm operatorul unar ‘-‘. Un operator minus, atunci când este utilizat ca unar, necesită un singur operand. Știm că acest operator schimbă semnul unui operand atunci când este aplicat unei variabile de date de bază. Să vedem cum să supraîncărcăm acest operator, astfel încât să poată fi aplicat unui obiect în același mod în care este aplicat unei variabile int sau float. Minusul unar, atunci când este aplicat unui obiect, ar trebui să diminueze fiecare dintre elementele sale de date.

Exemplu:

#include using namespace std class Height {public: // Member Objects int feet, inch // Constructor pentru a inițializa valoarea obiectului Height (int f, int i) {feet = f inch = i} // Operator de supraîncărcare (-) la efectuați decrement // operațiunea Height object void operator- () {feet-- inch-- cout<< 'Feet & Inches after decrement: ' << feet << ' ' ' << inch <

Ieșire:

Explicaţie:
În exemplul de mai sus, supraîncărcăm operatorul unar „-” pentru a efectua descreștere în cele două variabile ale clasei Înălțime. Transmitem doi parametri constructorului și le salvăm valorile în picioare și în variabile inch. Apoi definim funcția de supraîncărcare a operatorului (void operator- ()
) în care cele două variabile sunt decrementate cu o poziție.
Când scriem -h1 apelează funcția de supraîncărcare a operatorului și scade valorile transmise constructorului.

Continuăm cu acest articol despre supraîncărcarea operatorului în C ++.

Operator binar de supraîncărcare

Este o supraîncărcare a unui operator care operează pe doi operanzi. Să luăm același exemplu de clasă Înălțime, dar de data aceasta adăugăm două obiecte Înălțime h1 și h2.

Exemplu:

#include folosirea spațiului de nume clasă std Înălțime {public: int picioare, inch Înălțime () {picioare = 0 inch = 0} Înălțime (int f, int i) {picioare = f inch = i} // Operator de supraîncărcare (+) pentru a efectua adăugarea // obiectului la două distanțe utilizând operatorul binar Operatorul înălțimii + (Înălțimea și d2) // Apelați prin referință {// Creați un obiect pentru a returna Înălțimea h3 // Efectuați adăugarea de picioare și inci h3.feet = picioare + d2.feet h3. inch = inch + d2.inch // Returnează obiectul rezultat returnează h3}} int main () {Înălțime h1 (3, 7) Înălțime h2 (6, 1) Înălțime h3 // Folosește operatorul supraîncărcat h3 = h1 + h2 cout<< 'Sum of Feet & Inches: ' << h3.feet << ''' << h3.inch << endl return 0 } 

Ieșire:

Explicaţie:
Operator înălțime + (Înălțime & h2), aici return_type de funcție este clasa Înălțime, astfel returnează un obiect h3 din clasa Înălțime. În linia h3 = h1 + h2, h1 apelează funcția operator a obiectelor din clasele sale și ia h2 ca parametru, apoi aplicăm h3.feet = picioare + d2.feet și h3.inch = inch + d2.inch care stochează suma valorilor variabilelor picioare și inch în variabile asociate cu obiectul h3.
Când declarația „h3 = h1 + h2” invocă funcția supraîncărcată de operator, obiectul h1 și-a asumat responsabilitatea de a invoca funcția și h2 joacă rolul de argument care este transmis funcției. Declarația de invocare de mai sus este echivalentă cu h3 = h1.operator + (h2), prin urmare, membrul de date al h2 este accesat direct și membrul de date al h2 (care este transmis ca argument) este accesat folosind operatorul punct.

Reguli pentru supraîncărcarea operatorului

  • Numai operatorii existenți pot fi supraîncărcați și noii operatori nu pot fi supraîncărcați
  • Operatorul supraîncărcat trebuie să conțină cel puțin un operand al tipului de date definit de utilizator.
  • Nu folosim o funcție de prietenie pentru a supraîncărca anumiți operatori. Cu toate acestea, funcțiile membre pot fi utilizate pentru a supraîncărca acei operatori.
  • Când operatorii unari sunt supraîncărcați printr-o funcție membru, aceștia nu iau argumente explicite, dar, dacă sunt supraîncărcați de o funcție prieten, ei iau un argument.
  • Atunci când operatorii binari sunt supraîncărcați printr-o funcție membru, aceștia iau un argument explicit, iar dacă sunt supraîncărcați printr-o funcție prieten, iau două argumente explicite.

Astfel am ajuns la sfârșitul acestui articol despre „Supraîncărcarea operatorului în C ++”. Dacă doriți să aflați mai multe, consultați Java Training de la Edureka, o companie de învățare online de încredere. Edureka’s cursul este conceput pentru a vă instrui atât pentru conceptele Java de bază, cât și pentru cele avansate, împreună cu diverse cadre Java, cum ar fi Hibernate & Spring.

Ai o întrebare pentru noi? Vă rugăm să o menționați în secțiunea de comentarii a acestui blog și vă vom contacta cât mai curând posibil.