Š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:
#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;}
Izlaz:
Evo snimke zaslona koda:
Objašnjenje koda:
- Uključivanje datoteke zaglavlja iostream u naš kod za korištenje njegovih funkcija.
- Uključite std prostor imena u naš program da koristi njegove klase bez poziva.
- Stvorite klasu pod nazivom TestClass.
- Upotrijebite modifikator privatnog pristupa koji člana klase označava kao privatno dostupan.
- Stvorite broj cjelobrojne varijable. Ova će varijabla biti privatno dostupna.
- Upotrijebite modifikator javnog pristupa koji člana klase označava kao privatno dostupan.
- Upotrijebite konstruktor klase za inicijalizaciju brojača varijabli na 5.
- Preoptereti značenje operatora.
- Operator će vrijednost varijable x umanjiti za 1.
- Kraj odjeljka za preopterećenje operatera. Operater je dobio novo ime.
- Definiranje funkcije nazvane Display () funkcija.
- Ispišite vrijednost broja varijabli zajedno s drugim tekstom na konzoli kada je pozvana funkcija Display (). }} Označava kraj tijela Display () funkcije.
- Kraj predavanja.
- Pozovite glavnu () funkciju. U ovu funkciju treba dodati programsku logiku.
- Stvorite instancu klase TestClass i dajte joj ime tc.
- To će pozvati funkciju void operator - ().
- Upotrijebite stav TestClass Class za pozivanje funkcije Display ().
- Funkcija mora vratiti vrijednost nakon uspješnog završetka.
- 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:
- Funkcija člana
- Funkcija nečlana
- 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:
- 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.).
- Operatori = i & C ++ su prema zadanim postavkama preopterećeni. Na primjer, možete kopirati objekte iste klase izravno pomoću operatora =.
- Prioritet operatora ne mijenja asocijativno i prioritet operatora. Međutim, redoslijed ocjenjivanja možete promijeniti pomoću zagrade.
- 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:
#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;}
Izlaz:
Evo snimke zaslona koda:
Objašnjenje koda:
- Uključivanje datoteke zaglavlja iostream u naš kod za korištenje njegovih funkcija.
- Uključite std prostor imena u naš program da koristi njegove klase bez poziva.
- Stvorite klasu pod nazivom OperatorOverload.
- Upotrijebite modifikator privatnog pristupa koji člana klase označava kao privatno dostupan.
- Stvorite cjelobrojnu varijablu x. Ova će varijabla biti privatno dostupna.
- Upotrijebite modifikator javnog pristupa koji člana klase označava kao privatno dostupan.
- Upotrijebite konstruktor klase za inicijalizaciju varijable x na 10.
- Preoptereti značenje operatora ++.
- Operator će povećati vrijednost varijable x sa 2.
- Kraj odjeljka za preopterećenje operatera. Operater je dobio novo ime.
- Pozivanje funkcije Ispis ().
- Ispišite vrijednost varijable x zajedno s drugim tekstom na konzoli kada je pozvana funkcija Print ().
- Kraj tijela funkcije Print ().
- Kraj predavanja.
- Pozovite glavnu () funkciju. U ovu funkciju treba dodati programsku logiku.
- Stvorite instancu klase OperatorOverload pod nazivom ov.
- To će pozvati void operator ++ () funkciju.
- Upotrijebite stav klase OperatorOverload za pozivanje funkcije Print ().
- Funkcija mora vratiti vrijednost nakon uspješnog završetka.
- 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:
- Uključivanje datoteke zaglavlja iostream u naš program radi korištenja njegovih funkcija.
- Uključite prostor imena std u naš program kako biste koristili njegove klase bez pozivanja.
- Stvorite klasu pod nazivom TestClass. {Označava početak predavanja.
- Koristite modifikator privatnog pristupa za označavanje varijabli kao privatnih, što znači da im se može pristupiti samo unutar Klase.
- Definirajte dvije cjelobrojne varijable, realnu i više.
- Upotrijebite modifikator javnog pristupa da biste konstruktor označili kao javni, što znači da će biti dostupan čak i izvan klase.
- Stvaranje konstruktora klase i inicijalizacija varijabli.
- Inicijalizirajte vrijednost varijable real.
- Inicijalizirajte vrijednost varijable over.
- Kraj tijela konstruktora.
- Zamijenite značenje + operatora.
- Stvorite rezultat tipa podataka tipa TestClass.
- Koristite operator + sa složenim brojevima. Ovaj će redak dodati stvarni dio broja stvarnom dijelu drugog broja.
- Koristite operator + sa složenim brojevima. Ovaj će redak zamišljeni dio broja dodati imaginarnom dijelu drugog broja.
- Program će vratiti vrijednost varijable rezultata nakon uspješnog izvršavanja.
- Kraj definicije novog značenja + operatora, odnosno preopterećenja.
- Pozovite metodu print ().
- Ispišite novi složeni broj nakon dodavanja na konzolu.
- Kraj funkcije body of print ().
- Kraj tijela klase TestClass.
- Pozivanje glavne () funkcije.
- 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.
- Izvođenje operacije pomoću preopterećenog + operatora i pohranjivanje rezultata u varijablu c3.
- Ispis vrijednosti varijable c3 na konzoli.
- 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.