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:

Operator Preopterećenje

Evo snimke zaslona koda:

Operator Preopterećenje

Objašnjenje koda:

  1. Uključivanje iostream datoteke zaglavlja u naš kod za korištenje njegovih funkcija.
  2. Uključite prostor imena std u naš program kako biste koristili njegove klase bez pozivanja.
  3. Napravite klasu pod nazivom TestClass.
  4. Koristite modifikator privatnog pristupa, koji označava člana klase kao privatno dostupnog.
  5. Napravite cjelobrojnu varijablu count. Ova će varijabla biti privatno dostupna.
  6. Koristite modifikator javnog pristupa, koji označava člana klase kao privatno dostupnog.
  7. Koristite konstruktor klase da inicijalizirate varijablu brojač na 5.
  8. Preopteretiti značenje operatora —.
  9. Operator će smanjiti vrijednost varijable x za 1.
  10. Kraj odjeljka za preopterećenje operatora. Operater je dobio novo ime.
  11. Definiranje funkcije pod nazivom Display() funkcija.
  12. Ispišite vrijednost broja varijabli uz ostali tekst na konzoli kada se pozove funkcija Display(). } označava kraj tijela Display() funkcije.
  13. Kraj tijela razreda.
  14. Pozovite funkciju main(). Programsku logiku treba dodati unutar ove funkcije.
  15. Napravite instancu klase TestClass i dajte joj ime tc.
  16. Ovo će pozvati void operator –() funkciju.
  17. Upotrijebite stav klase TestClass za poziv funkcije Display().
  18. Funkcija mora vratiti vrijednost nakon uspješnog završetka.
  19. 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:

  1. Članska funkcija
  2. Funkcija nečlana
  3. 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

  1. 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.).
  2. = i & C++ operatori su prema zadanim postavkama preopterećeni. Na primjer, možete kopirati objekte iste klase izravno koristeći = operator.
  3. OperaTor prioritet ne mijenja asocijativno i prioritet operatora. Međutim, možete promijeniti redoslijed vrednovanja pomoću zagrada.
  4. 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:

Preopterećenje Operator Primjer

Evo snimke zaslona koda:

Preopterećenje Operator Primjer

Objašnjenje koda:

  1. Uključivanje iostream datoteke zaglavlja u naš kod za korištenje njegovih funkcija.
  2. Uključite prostor imena std u naš program kako biste koristili njegove klase bez pozivanja.
  3. Stvorite klasu pod nazivom OperatorPreopterećenje.
  4. Koristite modifikator privatnog pristupa, koji označava člana klase kao privatno dostupnog.
  5. Napravite cjelobrojnu varijablu x. Ova će varijabla biti privatno dostupna.
  6. Koristite modifikator javnog pristupa, koji označava člana klase kao privatno dostupnog.
  7. Koristite konstruktor klase za inicijalizaciju varijable x na 10.
  8. Preopteretiti značenje operatora ++.
  9. Operator će povećati vrijednost varijable x s 2.
  10. Kraj odjeljka za preopterećenje operatora. Operater je dobio novo ime.
  11. Poziv funkcije Print().
  12. Ispišite vrijednost varijable x uz ostali tekst na konzoli kada se pozove funkcija Print().
  13. Kraj tijela funkcije Print().
  14. Kraj tijela razreda.
  15. Pozovite funkciju main(). Programsku logiku treba dodati unutar ove funkcije.
  16. Stvorite instancu OperatorOverload Klasa pod nazivom ov.
  17. Ovo će pozvati funkciju operatora void ++().
  18. Koristite stav Operaklasu torOverload za pozivanje funkcije Print().
  19. Funkcija mora vratiti vrijednost nakon uspješnog završetka.
  20. 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:

Preopterećenje Operator Primjer

Evo snimke zaslona koda:

Preopterećenje Operator Primjer

Objašnjenje koda:

  1. Uključivanje datoteke zaglavlja iostream u naš program kako bismo koristili njegove funkcije.
  2. Uključite prostor imena std u naš program kako biste koristili njegove klase bez pozivanja.
  3. Napravite klasu pod nazivom TestClass. { označava početak tijela klase.
  4. Koristite modifikator privatnog pristupa za označavanje varijabli kao privatnih, što znači da im se može pristupiti samo iz klase.
  5. Definirajte dvije cjelobrojne varijable, real i over.
  6. Upotrijebite modifikator javnog pristupa da označite konstruktor kao javni, što znači da će biti dostupan čak i izvan klase.
  7. Stvaranje konstruktora klase i inicijalizacija varijable.
  8. Inicijalizirajte vrijednost varijable real.
  9. Inicijalizirajte vrijednost varijable preko.
  10. Kraj tijela konstruktora.
  11. Nadjačajte značenje operatora +.
  12. Stvorite rezultat tipa podataka tipa TestClass.
  13. Koristite operator + sa složenim brojevima. Ovaj redak će dodati realni dio broja realnom dijelu drugog broja.
  14. Koristite operator + sa složenim brojevima. Ova linija će dodati imaginarni dio broja imaginarnom dijelu drugog broja.
  15. Program će vratiti vrijednost varijable rezultat nakon uspješnog izvođenja.
  16. Kraj definicije novog značenja + operatora, odnosno preopterećenja.
  17. Pozovite metodu print().
  18. Ispišite novi kompleksni broj nakon zbrajanja na konzoli.
  19. Kraj tijela print() funkcije.
  20. Kraj tijela klase TestClass.
  21. Pozivanje funkcije main().
  22. 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.
  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 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.