C++ Operator Overbelastning med eksempler

Hva er Operator overbelastning?

Ved hjelp av overbelastning av operatรธren in C++, kan du spesifisere mer enn รฉn betydning for en operatรธr i ett omfang. Hensikten med operatรธroverbelastning er รฅ gi en spesiell betydning av en operatรธr for en brukerdefinert datatype.

Ved hjelp av operatรธroverbelastning kan du omdefinere flertallet av C++ operatรธrer. Du kan ogsรฅ bruke operatรธroverbelastning for รฅ utfรธre forskjellige operasjoner med รฉn operatรธr.

syntax

ร… overbelaste a C++ operatรธr, bรธr du definere en spesiell funksjon inne i klassen som fรธlger:

class class_name
{
    ... .. ...
    public
       return_type operator symbol (argument(s))
       {
           ... .. ...
       } 
    ... .. ...
};

Her er en forklaring pรฅ syntaksen ovenfor:

  • Return_type er returtypen for funksjonen.
  • Deretter nevner du operatรธrnรธkkelordet.
  • Symbolet angir operatรธrsymbolet som skal overbelastes. For eksempel +, -, <, ++.
  • Argumentet(e) kan sendes til operatรธrfunksjonen pรฅ samme mรฅte som funksjoner.

Eksempel 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;
}

Utgang:

 Operator overbelastning

Her er et skjermbilde av koden:

 Operator overbelastning

Code Forklaring:

  1. Inkluderer iostream-headerfilen i koden vรฅr for รฅ bruke funksjonene.
  2. Inkluder std-navneomrรฅdet i programmet vรฅrt for รฅ bruke klassene uten รฅ kalle det.
  3. Lag en klasse som heter TestClass.
  4. Bruk modifikatoren for privat tilgang, som markerer et klassemedlem som privat tilgjengelig.
  5. Opprett et heltallsvariabelantall. Denne variabelen vil vรฆre privat tilgjengelig.
  6. Bruk modifikatoren for offentlig tilgang, som markerer et klassemedlem som privat tilgjengelig.
  7. Bruk en klassekonstruktรธr for รฅ initialisere variabeltelleren til 5.
  8. Overbelaste betydningen av โ€”-operatรธren.
  9. Operatรธren vil redusere verdien av variabelen x med 1.
  10. Slutt pรฅ operatรธrens overbelastningsseksjon. Operatรธren har fรฅtt nytt navn.
  11. Definere en funksjon kalt Display() funksjon.
  12. Skriv ut verdien av variabelantall sammen med annen tekst pรฅ konsollen nรฅr Display()-funksjonen kalles. } markerer slutten av hoveddelen av Display()-funksjonen.
  13. Slutten av klassekroppen.
  14. Kalle hoved()-funksjonen. Programlogikken bรธr legges til i denne funksjonen.
  15. Lag en forekomst av klassen TestClass og gi den navnet tc.
  16. Dette vil kalle opp void-operatรธren โ€“()-funksjonen.
  17. Bruk holdningen til TestClass Class for รฅ kalle opp Display()-funksjonen.
  18. Funksjonen mรฅ returnere verdi ved vellykket fullfรธring.
  19. Slutten av brรธdteksten til funksjonen main().

Ulike tilnรฆrminger til Operator Overbelastning inn C++

Du kan utfรธre operatรธroverbelastning ved รฅ implementere en av fรธlgende typer funksjoner:

  1. Medlemsfunksjon
  2. Ikke-medlemsfunksjon
  3. vennefunksjon
  • Operatรธroverbelastningsfunksjonen kan vรฆre en medlemsfunksjon nรฅr en venstre operand er et objekt i klassen.
  • Nรฅr venstre operand er annerledes, vil Operator overbelastningsfunksjon bรธr vรฆre en ikke-medlemsfunksjon.

Du kan gjรธre operatรธroverbelastningsfunksjonen til en vennefunksjon hvis den trenger tilgang til private og beskyttede klassemedlemmer.

Kan alle C++ Operators vรฆre overbelastet?

Nei. Det er det C++ operatรธrer som ikke kan overbelastes.

De omfatter:

  • :: -Omfangsopplรธsningsoperatรธr
  • ?: -ternรฆr operatรธr.
  • . -medlemsvelger
  • Stรธrrelse pรฅ operatรธr
  • * -medlemspekervelger

Ting รฅ huske

  1. Med operatรธroverbelastning kan du omdefinere mรฅten en operatรธr fungerer pรฅ bare for de brukerdefinerte typene (objekter, strukturer). Du kan ikke bruke den for innebygde typer (float, char, int, etc.).
  2. = og & C++ operatรธrer er overbelastet som standard. For eksempel kan du kopiere objektene til samme klasse direkte ved รฅ bruke =-operatoren.
  3. Operator-prioritet endrer ikke assosiasjons- og prioritet til operatรธrer. Du kan imidlertid endre rekkefรธlgen pรฅ evalueringen ved รฅ bruke parentes.
  4. Det er fire operatรธrer du ikke kan overbelaste i C++. De inkluderer omfangsopplรธsningsoperatรธren (::), operatรธren for valg av medlemmer (.), valg av medlemmer gjennom en peker til funksjonsoperatรธren (.*), og den ternรฆre operatรธren (?:).

Regler for Operator overbelastning

Her er regler for Operator overbelastning:

  • For at det skal fungere, mรฅ minst รฉn operand vรฆre et brukerdefinert klasseobjekt.
  • Du kan bare overbelaste eksisterende operatรธrer. Du kan ikke overbelaste nye operatรธrer.
  • Noen operatรธrer kan ikke overbelastes ved รฅ bruke en vennefunksjon. Imidlertid kan slike operatรธrer bli overbelastet ved hjelp av medlemsfunksjonen.

Hvordan overbelaste Operator

Eksempel 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;
}

Utgang:

Overlast Operator eksempel

Her er et skjermbilde av koden:

Overlast Operator eksempel

Code Forklaring:

  1. Inkluderer iostream-headerfilen i koden vรฅr for รฅ bruke funksjonene.
  2. Inkluder std-navneomrรฅdet i programmet vรฅrt for รฅ bruke klassene uten รฅ kalle det.
  3. Lag en klasse som heter OperatorOverload.
  4. Bruk modifikatoren for privat tilgang, som markerer et klassemedlem som privat tilgjengelig.
  5. Lag en heltallsvariabel x. Denne variabelen vil vรฆre privat tilgjengelig.
  6. Bruk modifikatoren for offentlig tilgang, som markerer et klassemedlem som privat tilgjengelig.
  7. Bruk en klassekonstruktรธr for รฅ initialisere variabel x til 10.
  8. Overbelast betydningen av ++-operatoren.
  9. Operatรธren vil รธke verdien av variabel x med 2.
  10. Slutt pรฅ operatรธrens overbelastningsseksjon. Operatรธren har fรฅtt nytt navn.
  11. Kalle opp funksjonen Print().
  12. Skriv ut verdien av variabel x sammen med annen tekst pรฅ konsollen nรฅr Print()-funksjonen kalles.
  13. Slutten av brรธdteksten til Print()-funksjonen.
  14. Slutten av klassekroppen.
  15. Kalle hoved()-funksjonen. Programlogikken bรธr legges til i denne funksjonen.
  16. Opprett en forekomst av OperatorOverload Klasse kalt ov.
  17. Dette vil kalle opp void-operatoren ++()-funksjonen.
  18. Bruk holdningen til OperatorOverload-klassen for รฅ kalle Print()-funksjonen.
  19. Funksjonen mรฅ returnere verdi ved vellykket fullfรธring.
  20. Slutten av brรธdteksten til funksjonen main().

Eksempel 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();
}

Utgang:

Overlast Operator eksempel

Her er et skjermbilde av koden:

Overlast Operator eksempel

Code Forklaring:

  1. Inkluderer iostream-headerfilen i programmet vรฅrt for รฅ bruke funksjonene.
  2. Inkluder std-navneomrรฅdet i programmet vรฅrt for รฅ bruke klassene uten รฅ kalle det.
  3. Lag en klasse som heter TestClass. { markerer begynnelsen pรฅ klasseteksten.
  4. Bruk modifikatoren for privat tilgang til รฅ merke variabler som private, noe som betyr at de kun kan nรฅs fra klassen.
  5. Definer to heltallsvariabler, reelle og over.
  6. Bruk modifikatoren for offentlig tilgang til รฅ merke konstruktรธren som offentlig, noe som betyr at den vil vรฆre tilgjengelig ogsรฅ utenfor klassen.
  7. Opprette klassekonstruktรธren og initialisere variabler.
  8. Initialiser verdien av variabelen reell.
  9. Initialiser verdien av variabelen over.
  10. Slutten av konstruktรธrkroppen.
  11. Overstyr betydningen av +-operatoren.
  12. Opprett datatyperesultatet av typen TestClass.
  13. Bruk operatoren + med komplekse tall. Denne linjen vil legge til den reelle delen av et tall til den reelle delen av et annet tall.
  14. Bruk operatoren + med komplekse tall. Denne linjen vil legge til den imaginรฆre delen av et tall til den imaginรฆre delen av et annet tall.
  15. Programmet vil returnere verdien av variabelresultatet ved vellykket utfรธrelse.
  16. Slutten av definisjonen av den nye betydningen av + operatรธr, det vil si overbelastning.
  17. Kall opp print()-metoden.
  18. Skriv ut det nye komplekse tallet etter addisjon pรฅ konsollen.
  19. Slutten av hovedteksten () funksjon.
  20. Slutten av kroppen til TestClass Class.
  21. Kaller opp hoved()-funksjonen.
  22. Passerer verdiene til bรฅde reelle og komplekse deler som skal legges til. Den fรธrste delen av c1 vil bli lagt til den fรธrste delen av c2, det vil si 9+4. Den andre delen av c1 vil bli lagt til den andre delen av c, det vil si 5+3.
  23. Utfรธre en operasjon med overbelastet +-operatoren og lagre resultatet i variabel c3.
  24. Skriver ut verdien av variabel c3 pรฅ konsollen.
  25. Slutten av hoveddelen av funksjonen main().

Sammendrag

  • Du kan spesifisere mer enn รฉn betydning for en C++ operatรธr i ett omfang.
  • Dette kalles operatรธroverbelastning.
  • Operator overbelastning gir en spesiell betydning av en operatรธr for en brukerdefinert datatype.
  • Du kan omdefinere de fleste C++ operatรธrer gjennom operatรธroverbelastning.
  • Ikke alle C++ operatรธrer kan bli overbelastet.
  • For at en operatรธr skal bli overbelastet, mรฅ minst รฉn av operandene vรฆre et brukerdefinert objekt.
  • Kun eksisterende operatรธrer kan overbelastes. Du kan ikke overbelaste nye operatรธrer.

Oppsummer dette innlegget med: