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.