C++ Operator Pretrpavanje primjerima
Što je Operator Preopterećenje?
Korištenje preopterećenje operatera in C++, možete navesti više od jednog značenja za operator 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++ operateri. Također možete koristiti preopterećenje operatora za izvođenje različitih operacija pomoću jednog operatora.
Sintaksa
Preopteretiti a C++ operatora, trebali biste definirati posebnu funkciju unutar klase na sljedeći način:
class class_name { ... .. ... public return_type operator symbol (argument(s)) { ... .. ... } ... .. ... };
Evo objašnjenja gornje sintakse:
- return_type je tip povrata za funkciju.
- Zatim spominjete ključnu riječ operator.
- Simbol označava simbol operatera koji treba preopteretiti. Na primjer, +, -, <, ++.
- Argument(i) se mogu proslijediti operatorskoj funkciji na isti način kao i funkcije.
Primjer 1
#include <iostream> 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:
- Uključivanje iostream datoteke zaglavlja u naš kod za korištenje njegovih funkcija.
- Uključite prostor imena std u naš program kako biste koristili njegove klase bez pozivanja.
- Napravite klasu pod nazivom TestClass.
- Koristite modifikator privatnog pristupa, koji označava člana klase kao privatno dostupnog.
- Napravite cjelobrojnu varijablu count. Ova će varijabla biti privatno dostupna.
- Koristite modifikator javnog pristupa, koji označava člana klase kao privatno dostupnog.
- Koristite konstruktor klase da inicijalizirate varijablu brojač na 5.
- Preopteretiti značenje operatora —.
- Operator će smanjiti vrijednost varijable x za 1.
- Kraj odjeljka za preopterećenje operatora. Operater je dobio novo ime.
- Definiranje funkcije pod nazivom Display() funkcija.
- Ispišite vrijednost broja varijabli uz ostali tekst na konzoli kada se pozove funkcija Display(). } označava kraj tijela Display() funkcije.
- Kraj tijela razreda.
- Pozovite funkciju main(). Programsku logiku treba dodati unutar ove funkcije.
- Napravite instancu klase TestClass i dajte joj ime tc.
- Ovo će pozvati void operator –() funkciju.
- Upotrijebite stav klase TestClass za poziv funkcije Display().
- Funkcija mora vratiti vrijednost nakon uspješnog završetka.
- Kraj tijela funkcije main().
Različiti pristupi Operator Preopterećenje u C++
Možete izvršiti preopterećenje operatora implementacijom bilo koje od sljedećih vrsta funkcija:
- Članska funkcija
- Funkcija nečlana
- Funkcija prijatelja
- Funkcija preopterećenja operatora može biti funkcija članica kada je lijevi operand objekt klase.
- Kada je lijevi operand drugačiji, Operator funkcija preopterećenja 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.
Može sve C++ Operabiti preopterećeni?
Ne. Postoje C++ operatori koji se ne mogu preopteretiti.
Oni uključuju:
- :: -Operator rezolucije opsega
- ?: -ternarni operator.
- . -selektor članova
- Sizeof operator
- * -selektor pokazivača člana
Stvari koje treba zapamtiti
- Uz preopterećenje operatora, možete redefinirati način na koji operator radi samo za korisnički definirane tipove (objekte, strukture). Ne možete ga koristiti za ugrađene tipove (float, char, int, itd.).
- = i & C++ operatori su prema zadanim postavkama preopterećeni. Na primjer, možete kopirati objekte iste klase izravno koristeći = operator.
- OperaTor prioritet ne mijenja asocijativno i prioritet operatora. Međutim, možete promijeniti redoslijed vrednovanja pomoću zagrada.
- Postoje četiri operatora koja ne možete preopteretiti C++. Oni uključuju operator razlučivanja opsega (::), operator odabira člana (.), odabir člana putem operatora pokazivača na funkciju (.*) i ternarni operator (?:).
Pravila za Operator Preopterećenje
Evo pravila za Operator preopterećenje:
- Da bi funkcionirao, barem jedan operand mora biti korisnički definiran objekt klase.
- Možete samo preopteretiti postojeće operatore. Ne možete preopteretiti nove operatere.
- Neki se operatori ne mogu preopteretiti pomoću funkcije prijatelja. Međutim, takvi se operatori mogu preopteretiti korištenjem funkcije člana.
Kako preopteretiti Operahumka
Primjer 1
#include <iostream> 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:
- Uključivanje iostream datoteke zaglavlja u naš kod za korištenje njegovih funkcija.
- Uključite prostor imena std u naš program kako biste koristili njegove klase bez pozivanja.
- Stvorite klasu pod nazivom OperatorPreopterećenje.
- Koristite modifikator privatnog pristupa, koji označava člana klase kao privatno dostupnog.
- Napravite cjelobrojnu varijablu x. Ova će varijabla biti privatno dostupna.
- Koristite modifikator javnog pristupa, koji označava člana klase kao privatno dostupnog.
- Koristite konstruktor klase za inicijalizaciju varijable x na 10.
- Preopteretiti značenje operatora ++.
- Operator će povećati vrijednost varijable x s 2.
- Kraj odjeljka za preopterećenje operatora. Operater je dobio novo ime.
- Poziv funkcije Print().
- Ispišite vrijednost varijable x uz ostali tekst na konzoli kada se pozove funkcija Print().
- Kraj tijela funkcije Print().
- Kraj tijela razreda.
- Pozovite funkciju main(). Programsku logiku treba dodati unutar ove funkcije.
- Stvorite instancu OperatorOverload Klasa pod nazivom ov.
- Ovo će pozvati funkciju operatora void ++().
- Koristite stav Operaklasu torOverload za pozivanje funkcije Print().
- Funkcija mora vratiti vrijednost nakon uspješnog završetka.
- Kraj tijela funkcije main().
Primjer 2
#include<iostream> using 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 kako bismo koristili njegove funkcije.
- Uključite prostor imena std u naš program kako biste koristili njegove klase bez pozivanja.
- Napravite klasu pod nazivom TestClass. { označava početak tijela klase.
- Koristite modifikator privatnog pristupa za označavanje varijabli kao privatnih, što znači da im se može pristupiti samo iz klase.
- Definirajte dvije cjelobrojne varijable, real i over.
- Upotrijebite modifikator javnog pristupa da označite konstruktor kao javni, što znači da će biti dostupan čak i izvan klase.
- Stvaranje konstruktora klase i inicijalizacija varijable.
- Inicijalizirajte vrijednost varijable real.
- Inicijalizirajte vrijednost varijable preko.
- Kraj tijela konstruktora.
- Nadjačajte značenje operatora +.
- Stvorite rezultat tipa podataka tipa TestClass.
- Koristite operator + sa složenim brojevima. Ovaj redak će dodati realni dio broja realnom dijelu drugog broja.
- Koristite operator + sa složenim brojevima. Ova linija će dodati imaginarni dio broja imaginarnom dijelu drugog broja.
- Program će vratiti vrijednost varijable rezultat nakon uspješnog izvođenja.
- Kraj definicije novog značenja + operatora, odnosno preopterećenja.
- Pozovite metodu print().
- Ispišite novi kompleksni broj nakon zbrajanja na konzoli.
- Kraj tijela print() funkcije.
- Kraj tijela klase TestClass.
- Pozivanje funkcije main().
- Prosljeđivanje vrijednosti stvarnih i složenih dijelova koje treba dodati. Prvi dio c1 će se dodati prvom dijelu c2, to jest 9+4. Drugi dio od c1 će se dodati drugom dijelu od c, to jest, 5+3.
- Izvođenje operacije pomoću preopterećenog operatora + i pohranjivanje rezultata u varijablu c3.
- Ispis vrijednosti varijable c3 na konzoli.
- Kraj tijela funkcije main().
rezime
- Možete navesti više od jednog značenja za a C++ operater u jednom opsegu.
- To se zove preopterećenje operatora.
- Operator overloading pruža posebno značenje operatora za korisnički definirani tip podataka.
- Većinu možete redefinirati C++ operatora kroz preopterećenje operatora.
- Ne sve C++ operatori mogu biti preopterećeni.
- Da bi operator bio preopterećen, barem jedan od operanda mora biti korisnički definiran objekt.
- Samo postojeći operatori mogu se preopteretiti. Ne možete preopteretiti nove operatore.