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:
Code Forklaring:
- 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:
Code Forklaring:
- 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:
Code Forklaring:
- 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.



