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 to: OperaPreoptereฤ‡enje Tor-a redefinira operatore poput + za vaลกe vlastite klase.
  • โœ๏ธ Sintaksa: Definirajte funkciju pod nazivom operator nakon koje slijedi simbol, poput operator+.
  • ๐Ÿ”€ Pristupi: Operatore moลพete preopteretiti kao funkcije ฤlanice ili prijateljske funkcije.
  • ???? ograniฤenja: Neki operatori, kao ลกto su ::, . i ?:, ne mogu se preopteretiti.
  • ๐Ÿค– Pomoฤ‡ umjetne inteligencije: Alati umjetne inteligencije poput GitHub Copilota odmah funkcioniraju s preoptereฤ‡enjem operatora pisanja.

C++ Operator Preoptereฤ‡enje

ล 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

Code Objaลกnjenje:

  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

Code Objaลกnjenje:

  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

Code Objaลกnjenje:

  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().

Pitanja i odgovori

OperaPreoptereฤ‡enje Tor-a vam omoguฤ‡uje redefiniranje naฤina na koji ugraฤ‘eni operatori, poput + ili ==, rade s objektima vaลกih vlastitih klasa, tako da se ponaลกaju prirodno za prilagoฤ‘ene tipove podataka.

Definirajte posebnu funkciju ฤije je ime kljuฤna rijeฤ operator nakon koje slijedi simbol, kao ลกto je operator+. Ona uzima operande kao parametre i vraฤ‡a rezultat.

Postoje dva glavna pristupa: preoptereฤ‡enje operatora kao funkcije ฤlanice klase ili kao prijateljske funkcije koja moลพe pristupiti privatnim ฤlanovima klase.

Veฤ‡ina operatora moลพe se preopteretiti, ali neki ne mogu, ukljuฤujuฤ‡i operatore razluฤivanja opsega (::), pristupa ฤlanovima (.), pokazivaฤa ฤlanova (.*) i ternarnih (?:) operatora.

Moลพete preopteretiti samo postojeฤ‡e operatore, barem jedan operand mora biti korisniฤki definiran tip i ne moลพete mijenjati prioritet, asocijativnost ili broj operanada operatora.

AI asistenti poput GitHub Copilota generiraju funkcije preoptereฤ‡enja operatora za vaลกe klase, biraju izmeฤ‘u funkcija ฤlanova i prijateljskih funkcija te dodaju ispravne tipove povrata dok tipkate.

Da. Alati pokretani umjetnom inteligencijom generiraju preoptereฤ‡ene operatore poput + i ==, slijede standardna pravila i oznaฤavaju operatore koji se ne mogu preopteretiti, ลกtedeฤ‡i vrijeme i izbjegavajuฤ‡i pogreลกke.

OperaPreoptereฤ‡enje tor-a olakลกava koriลกtenje i ฤitanje klasa tako ลกto omoguฤ‡uje objektima rad s poznatim operatorima, kao ลกto je zbrajanje dva vektora s + umjesto imenovane funkcije.

Saลพmite ovu objavu uz: