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:
Her er et skjermbilde av koden:
Kodeforklaring:
- Inkluderer iostream-headerfilen i koden vår for å bruke funksjonene.
- Inkluder std-navneområdet i programmet vårt for å bruke klassene uten å kalle det.
- Lag en klasse som heter TestClass.
- Bruk modifikatoren for privat tilgang, som markerer et klassemedlem som privat tilgjengelig.
- Opprett et heltallsvariabelantall. Denne variabelen vil være privat tilgjengelig.
- Bruk modifikatoren for offentlig tilgang, som markerer et klassemedlem som privat tilgjengelig.
- Bruk en klassekonstruktør for å initialisere variabeltelleren til 5.
- Overbelaste betydningen av —-operatøren.
- Operatøren vil redusere verdien av variabelen x med 1.
- Slutt på operatørens overbelastningsseksjon. Operatøren har fått nytt navn.
- Definere en funksjon kalt Display() funksjon.
- Skriv ut verdien av variabelantall sammen med annen tekst på konsollen når Display()-funksjonen kalles. } markerer slutten av hoveddelen av Display()-funksjonen.
- Slutten av klassekroppen.
- Kalle hoved()-funksjonen. Programlogikken bør legges til i denne funksjonen.
- Lag en forekomst av klassen TestClass og gi den navnet tc.
- Dette vil kalle opp void-operatøren –()-funksjonen.
- Bruk holdningen til TestClass Class for å kalle opp Display()-funksjonen.
- Funksjonen må returnere verdi ved vellykket fullføring.
- 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:
- Medlemsfunksjon
- Ikke-medlemsfunksjon
- 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
- 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.).
- = og & C++ operatører er overbelastet som standard. For eksempel kan du kopiere objektene til samme klasse direkte ved å bruke =-operatoren.
- Operator-prioritet endrer ikke assosiasjons- og prioritet til operatører. Du kan imidlertid endre rekkefølgen på evalueringen ved å bruke parentes.
- 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:
Her er et skjermbilde av koden:
Kodeforklaring:
- Inkluderer iostream-headerfilen i koden vår for å bruke funksjonene.
- Inkluder std-navneområdet i programmet vårt for å bruke klassene uten å kalle det.
- Lag en klasse som heter OperatorOverload.
- Bruk modifikatoren for privat tilgang, som markerer et klassemedlem som privat tilgjengelig.
- Lag en heltallsvariabel x. Denne variabelen vil være privat tilgjengelig.
- Bruk modifikatoren for offentlig tilgang, som markerer et klassemedlem som privat tilgjengelig.
- Bruk en klassekonstruktør for å initialisere variabel x til 10.
- Overbelast betydningen av ++-operatoren.
- Operatøren vil øke verdien av variabel x med 2.
- Slutt på operatørens overbelastningsseksjon. Operatøren har fått nytt navn.
- Kalle opp funksjonen Print().
- Skriv ut verdien av variabel x sammen med annen tekst på konsollen når Print()-funksjonen kalles.
- Slutten av brødteksten til Print()-funksjonen.
- Slutten av klassekroppen.
- Kalle hoved()-funksjonen. Programlogikken bør legges til i denne funksjonen.
- Opprett en forekomst av OperatorOverload Klasse kalt ov.
- Dette vil kalle opp void-operatoren ++()-funksjonen.
- Bruk holdningen til OperatorOverload-klassen for å kalle Print()-funksjonen.
- Funksjonen må returnere verdi ved vellykket fullføring.
- 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:
Her er et skjermbilde av koden:
Kodeforklaring:
- Inkluderer iostream-headerfilen i programmet vårt for å bruke funksjonene.
- Inkluder std-navneområdet i programmet vårt for å bruke klassene uten å kalle det.
- Lag en klasse som heter TestClass. { markerer begynnelsen på klasseteksten.
- Bruk modifikatoren for privat tilgang til å merke variabler som private, noe som betyr at de kun kan nås fra klassen.
- Definer to heltallsvariabler, reelle og over.
- Bruk modifikatoren for offentlig tilgang til å merke konstruktøren som offentlig, noe som betyr at den vil være tilgjengelig også utenfor klassen.
- Opprette klassekonstruktøren og initialisere variabler.
- Initialiser verdien av variabelen reell.
- Initialiser verdien av variabelen over.
- Slutten av konstruktørkroppen.
- Overstyr betydningen av +-operatoren.
- Opprett datatyperesultatet av typen TestClass.
- Bruk operatoren + med komplekse tall. Denne linjen vil legge til den reelle delen av et tall til den reelle delen av et annet tall.
- 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.
- Programmet vil returnere verdien av variabelresultatet ved vellykket utførelse.
- Slutten av definisjonen av den nye betydningen av + operatør, det vil si overbelastning.
- Kall opp print()-metoden.
- Skriv ut det nye komplekse tallet etter addisjon på konsollen.
- Slutten av hovedteksten () funksjon.
- Slutten av kroppen til TestClass Class.
- Kaller opp hoved()-funksjonen.
- 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.
- Utføre en operasjon med overbelastet +-operatoren og lagre resultatet i variabel c3.
- Skriver ut verdien av variabel c3 på konsollen.
- 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.



