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

Kodeforklaring:

  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

Kodeforklaring:

  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

Kodeforklaring:

  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.