C++ Operator Pretrpavanje primjerima
โก Pametni saลพetak
Operapreoptereฤenje tor-a u C++ omoguฤuje vam redefiniranje naฤina na koji ugraฤeni operatori poput + i == rade s vaลกim vlastitim klasama i objektima. Ovdje ฤete nauฤiti njegovu sintaksu, pristupe, koji se operatori mogu preopteretiti i pravila kojih se treba pridrลพavati.

ล 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:
Code Objaลกnjenje:
- 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:
Code Objaลกnjenje:
- 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:
Code Objaลกnjenje:
- 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().



