Preopterećenje C ++ operatora primjerima

Sadržaj:

Anonim

Što je preopterećenje operatora?

Koristeći preopterećenje operatora u C ++-u, možete odrediti više od jednog značenja za operatora u jednom opsegu. Svrha preopterećenja operatora je pružiti posebno značenje operatora za korisnički definirani tip podataka.

Uz pomoć preopterećenja operatora možete redefinirati većinu C ++ operatora. Također možete koristiti preopterećenje operatora za obavljanje različitih operacija pomoću jednog operatora.

U ovom C ++ tutorialu naučit ćete:

  • Što je preopterećenje operatora?
  • Sintaksa
  • Različiti pristupi preopterećenju operatora u C ++
  • Mogu li se svi C ++ operatori preopteretiti?
  • Stvari koje treba zapamtiti:
  • Pravila za preopterećenje operatera:
  • Kako preopteretiti operatora:

Sintaksa

Da biste preopteretili C ++ operator, trebali biste definirati posebnu funkciju unutar Klase kako slijedi:

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

Evo objašnjenja za gornju sintaksu:

  • Return_type je tip povrata za funkciju.
  • Dalje, spominjete ključnu riječ operatora.
  • Simbol označava simbol operatora koji se preopterećuje. Na primjer, +, -, <, ++.
  • Argumenti se mogu proslijediti funkciji operatora na isti način kao i funkcije.

Primjer 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;}

Izlaz:

Evo snimke zaslona koda:

Objašnjenje koda:

  1. Uključivanje datoteke zaglavlja iostream u naš kod za korištenje njegovih funkcija.
  2. Uključite std prostor imena u naš program da koristi njegove klase bez poziva.
  3. Stvorite klasu pod nazivom TestClass.
  4. Upotrijebite modifikator privatnog pristupa koji člana klase označava kao privatno dostupan.
  5. Stvorite broj cjelobrojne varijable. Ova će varijabla biti privatno dostupna.
  6. Upotrijebite modifikator javnog pristupa koji člana klase označava kao privatno dostupan.
  7. Upotrijebite konstruktor klase za inicijalizaciju brojača varijabli na 5.
  8. Preoptereti značenje operatora.
  9. Operator će vrijednost varijable x umanjiti za 1.
  10. Kraj odjeljka za preopterećenje operatera. Operater je dobio novo ime.
  11. Definiranje funkcije nazvane Display () funkcija.
  12. Ispišite vrijednost broja varijabli zajedno s drugim tekstom na konzoli kada je pozvana funkcija Display (). }} Označava kraj tijela Display () funkcije.
  13. Kraj predavanja.
  14. Pozovite glavnu () funkciju. U ovu funkciju treba dodati programsku logiku.
  15. Stvorite instancu klase TestClass i dajte joj ime tc.
  16. To će pozvati funkciju void operator - ().
  17. Upotrijebite stav TestClass Class za pozivanje funkcije Display ().
  18. Funkcija mora vratiti vrijednost nakon uspješnog završetka.
  19. Kraj tijela funkcije main ().

Različiti pristupi preopterećenju operatora u C ++

Preopterećenje operatora možete izvršiti primjenom bilo koje od sljedećih vrsta funkcija:

  1. Funkcija člana
  2. Funkcija nečlana
  3. Funkcija prijatelja
  • Funkcija preopterećenja operatora može biti funkcija člana kada je lijevi operand objekt klase.
  • Kada se lijevi operand razlikuje, funkcija preopterećenja operatora trebala bi biti funkcija koja nije član.

Funkciju preopterećenja operatora možete učiniti funkcijom prijatelja ako treba pristupiti privatnim i zaštićenim članovima klase.

Mogu li se svi C ++ operatori preopteretiti?

Ne. Postoje C ++ operatori koji se ne mogu preopteretiti.

Oni uključuju:

  • :: -Operator razlučivosti opsega
  • ?: -mjetarni operator.
  • . -izbornik člana
  • Veličina operatora
  • * -izbornik pokazivača člana

Stvari koje treba zapamtiti:

  1. Preopterećenjem operatora možete redefinirati način na koji operater radi samo za korisnički definirane tipove (objekte, strukture). Ne možete ga koristiti za ugrađene tipove (float, char, int, itd.).
  2. Operatori = i & C ++ su prema zadanim postavkama preopterećeni. Na primjer, možete kopirati objekte iste klase izravno pomoću operatora =.
  3. Prioritet operatora ne mijenja asocijativno i prioritet operatora. Međutim, redoslijed ocjenjivanja možete promijeniti pomoću zagrade.
  4. Postoje četiri operatora koja u C ++ ne možete preopteretiti. Uključuju operator razlučivanja opsega (: :), operator odabira člana (.), Odabir člana kroz pokazivač na funkcijski operator (. *) I ternarni operator (? :).

Pravila za preopterećenje operatera:

Evo pravila za preopterećenje operatora:

  • Da bi mogao funkcionirati, barem jedan operand mora biti korisnički definirani objekt klase.
  • Postojeće operatore možete samo preopteretiti. Ne možete preopteretiti nove operatore.
  • Neki se operateri ne mogu preopteretiti pomoću funkcije prijatelja. Međutim, takvi se operateri mogu preopteretiti pomoću funkcije člana.

Kako preopteretiti operatora:

Primjer 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;}

Izlaz:

Evo snimke zaslona koda:

Objašnjenje koda:

  1. Uključivanje datoteke zaglavlja iostream u naš kod za korištenje njegovih funkcija.
  2. Uključite std prostor imena u naš program da koristi njegove klase bez poziva.
  3. Stvorite klasu pod nazivom OperatorOverload.
  4. Upotrijebite modifikator privatnog pristupa koji člana klase označava kao privatno dostupan.
  5. Stvorite cjelobrojnu varijablu x. Ova će varijabla biti privatno dostupna.
  6. Upotrijebite modifikator javnog pristupa koji člana klase označava kao privatno dostupan.
  7. Upotrijebite konstruktor klase za inicijalizaciju varijable x na 10.
  8. Preoptereti značenje operatora ++.
  9. Operator će povećati vrijednost varijable x sa 2.
  10. Kraj odjeljka za preopterećenje operatera. Operater je dobio novo ime.
  11. Pozivanje funkcije Ispis ().
  12. Ispišite vrijednost varijable x zajedno s drugim tekstom na konzoli kada je pozvana funkcija Print ().
  13. Kraj tijela funkcije Print ().
  14. Kraj predavanja.
  15. Pozovite glavnu () funkciju. U ovu funkciju treba dodati programsku logiku.
  16. Stvorite instancu klase OperatorOverload pod nazivom ov.
  17. To će pozvati void operator ++ () funkciju.
  18. Upotrijebite stav klase OperatorOverload za pozivanje funkcije Print ().
  19. Funkcija mora vratiti vrijednost nakon uspješnog završetka.
  20. Kraj tijela funkcije main ().

Primjer 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();}

Izlaz:

Evo snimke zaslona koda:

Objašnjenje koda:

  1. Uključivanje datoteke zaglavlja iostream u naš program radi korištenja njegovih funkcija.
  2. Uključite prostor imena std u naš program kako biste koristili njegove klase bez pozivanja.
  3. Stvorite klasu pod nazivom TestClass. {Označava početak predavanja.
  4. Koristite modifikator privatnog pristupa za označavanje varijabli kao privatnih, što znači da im se može pristupiti samo unutar Klase.
  5. Definirajte dvije cjelobrojne varijable, realnu i više.
  6. Upotrijebite modifikator javnog pristupa da biste konstruktor označili kao javni, što znači da će biti dostupan čak i izvan klase.
  7. Stvaranje konstruktora klase i inicijalizacija varijabli.
  8. Inicijalizirajte vrijednost varijable real.
  9. Inicijalizirajte vrijednost varijable over.
  10. Kraj tijela konstruktora.
  11. Zamijenite značenje + operatora.
  12. Stvorite rezultat tipa podataka tipa TestClass.
  13. Koristite operator + sa složenim brojevima. Ovaj će redak dodati stvarni dio broja stvarnom dijelu drugog broja.
  14. Koristite operator + sa složenim brojevima. Ovaj će redak zamišljeni dio broja dodati imaginarnom dijelu drugog broja.
  15. Program će vratiti vrijednost varijable rezultata nakon uspješnog izvršavanja.
  16. Kraj definicije novog značenja + operatora, odnosno preopterećenja.
  17. Pozovite metodu print ().
  18. Ispišite novi složeni broj nakon dodavanja na konzolu.
  19. Kraj funkcije body of print ().
  20. Kraj tijela klase TestClass.
  21. Pozivanje glavne () funkcije.
  22. Prolazeći vrijednosti i stvarnih i složenih dijelova koje treba dodati. Prvi dio c1 bit će dodan prvom dijelu c2, odnosno 9 + 4. Drugi dio c1 bit će dodan drugom dijelu c, odnosno 5 + 3.
  23. Izvođenje operacije pomoću preopterećenog + operatora i pohranjivanje rezultata u varijablu c3.
  24. Ispis vrijednosti varijable c3 na konzoli.
  25. Kraj tijela glavne () funkcije.

Sažetak:

  • U jednom opsegu možete navesti više značenja za C ++ operatora.
  • To se naziva preopterećenje operatera.
  • Preopterećenje operatora daje posebno značenje operatora za korisnički definirani tip podataka.
  • Većinu C ++ operatora možete redefinirati putem preopterećenja operatora.
  • Ne mogu se svi C ++ operatori preopteretiti.
  • Da bi se operator preopteretio, barem jedan od operanda mora biti korisnički definirani objekt.
  • Samo postojeći operatori mogu se preopteretiti. Ne možete preopteretiti nove operatore.