Hva er operatøroverbelastning?
Ved bruk av operatøroverbelastning i C ++ kan du spesifisere mer enn en betydning for en operatør i ett omfang. Hensikten med operatøroverbelastning er å gi en operatør en spesiell betydning for en brukerdefinert datatype.
Ved hjelp av overbelastning av operatører kan du omdefinere flertallet av C ++ - operatørene. Du kan også bruke operatøroverbelastning for å utføre forskjellige operasjoner ved hjelp av en operatør.
I denne C ++ opplæringen vil du lære:
- Hva er operatøroverbelastning?
- Syntaks
- Ulike tilnærminger til operatøroverbelastning i C ++
- Kan alle C ++ -operatører overbelastes?
- Ting å huske:
- Regler for overbelastning av operatører:
- Hvordan overbelaste operatøren:
Syntaks
For å overbelaste en C ++ -operatør, bør du definere en spesiell funksjon inne i klassen som følger:
class class_name{… publicreturn_type operator symbol (argument(s)){… }… };
Her er en forklaring på ovenstående syntaks:
- Return_type er returtypen for funksjonen.
- Deretter nevner du operatørens nøkkelord.
- Symbolet betegner operatørsymbolet som skal overbelastes. For eksempel +, -, <, ++.
- Argumentet / argumentene kan overføres til operatørfunksjonen på samme måte som funksjoner.
Eksempel 1:
#includeusing 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;}
Produksjon:
Her er et skjermbilde av koden:
Kode Forklaring:
- Inkludert iostream header-fil i koden vår for å bruke funksjonene.
- Inkluder std navneområdet i programmet vårt for å bruke klassene uten å kalle det.
- Opprett en klasse som heter TestClass.
- Bruk modifikatoren for privat tilgang, som markerer et klassemedlem som privat tilgjengelig.
- Opprett et heltallsvar. Denne variabelen vil være privat tilgjengelig.
- Bruk modifikatoren for offentlig tilgang, som markerer et klassemedlem som privat tilgjengelig.
- Bruk en klassekonstruktør til å initialisere variabeltelleren til 5.
- Overbelaste betydningen av operatøren.
- Operatøren vil redusere verdien av variabelen x med 1.
- Slutten på operatørens overbelastningsseksjon. Operatøren har fått et nytt navn.
- Definere en funksjon med navnet Display () -funksjon.
- Skriv ut verdien av variabelantall sammen med annen tekst på konsollen når Display () -funksjonen kalles. } Markerer slutten på kroppen til Display () -funksjonen.
- Avslutningen på klassens kropp.
- Ring til hovedfunksjonen (). Programlogikken skal legges til innenfor denne funksjonen.
- Opprett en forekomst av klassen TestClass og gi den navnet tc.
- Dette vil ringe ugyldighetsoperatøren - () -funksjonen.
- Bruk holdningen til TestClass Class for å ringe til Display () -funksjonen.
- Funksjonen må returnere verdi etter vellykket fullføring.
- Slutten av hoveddelen av funksjonen ().
Ulike tilnærminger til operatøroverbelastning i C ++
Du kan utføre operatøroverbelastning ved å implementere en av følgende funksjoner:
- Medlemsfunksjon
- Ikke-medlemsfunksjon
- Vennefunksjon
- Operatørens overbelastningsfunksjon kan være en medlemsfunksjon når en venstre operand er et objekt i klassen.
- Når venstre operand er annerledes, bør overbelastningsfunksjonen for operatøren være en ikke-medlemsfunksjon.
Du kan gjøre operatørens overbelastningsfunksjon til en vennefunksjon hvis den trenger tilgang til de private og beskyttede klassemedlemmene.
Kan alle C ++ -operatører overbelastes?
Nei. Det er C ++ operatører som ikke kan overbelastes.
De inkluderer:
- :: -Oppløsningsoperatør
- ?: -interne operatør.
- . -medlemsvelger
- Operatørens størrelse
- * -medlemmerpekervelger
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 til innebygde typer (float, char, int, etc.).
- = Og & C ++ operatørene er overbelastet som standard. For eksempel kan du kopiere objektene i samme klasse direkte ved hjelp av = operatoren.
- Operatørprioritet endrer ikke tilknytning og prioritet til operatører. Du kan imidlertid endre rekkefølgen på evaluering ved hjelp av parentes.
- Det er fire operatører du ikke kan overbelaste i C ++. De inkluderer operatøren for omfangsoppløsning (: :), medlemsvalgoperatør (.), Medlemsvalg gjennom en peker til funksjonsoperatør (. *) Og den ternære operatøren (? :).
Regler for overbelastning av operatører:
Her er regler for overbelastning av operatører:
- For at det skal fungere, må minst en 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 hjelp av en vennefunksjon. Imidlertid kan slike operatører overbelastes ved hjelp av medlemsfunksjon.
Hvordan overbelaste operatøren:
Eksempel 1:
#includeusing 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;}
Produksjon:
Her er et skjermbilde av koden:
Kode Forklaring:
- Inkludert iostream header-fil i koden vår for å bruke funksjonene.
- Inkluder std navneområdet i programmet vårt for å bruke klassene uten å kalle det.
- Opprett en klasse med navnet OperatorOverload.
- Bruk modifikatoren for privat tilgang, som markerer et klassemedlem som privat tilgjengelig.
- Opprett en heltallvariabel x. Denne variabelen vil være privat tilgjengelig.
- Bruk modifikatoren for offentlig tilgang, som markerer et klassemedlem som privat tilgjengelig.
- Bruk en klassekonstruktør til å initialisere variabelen x til 10.
- Overbelaste betydningen av ++ -operatøren.
- Operatøren vil øke verdien av variabelen x med 2.
- Slutten på operatørens overbelastningsseksjon. Operatøren har fått et nytt navn.
- Ringe til utskriftsfunksjonen ().
- Skriv ut verdien av variabelen x sammen med annen tekst på konsollen når funksjonen Print () kalles.
- Slutt på hoveddelen av Print () -funksjonen.
- Avslutningen på klassens kropp.
- Ring til hovedfunksjonen (). Programlogikken skal legges til innenfor denne funksjonen.
- Opprett en forekomst av OperatorOverload-klassen som heter ov.
- Dette vil kalle void operator ++ () -funksjonen.
- Bruk holdningen til klassen OperatorOverload for å ringe til Print () -funksjonen.
- Funksjonen må returnere verdi etter vellykket fullføring.
- Slutten av hoveddelen av funksjonen ().
Eksempel 2:
#includeusing 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();}
Produksjon:
Her er et skjermbilde av koden:
Kode Forklaring:
- Inkludert iostream header-fil i programmet vårt for å kunne bruke funksjonene.
- Inkluder std navneområdet i programmet vårt for å kunne bruke klassene uten å kalle det.
- Opprett en klasse som heter TestClass. {Markerer begynnelsen på klassens kropp.
- Bruk modifikatoren for privat tilgang til å merke variabler som private, noe som betyr at de bare er tilgjengelige fra klassen.
- Definer to heltallvariabler, reelle og over.
- Bruk modifikatoren for offentlig tilgang til å merke konstruktøren som offentlig, noe som betyr at den vil være tilgjengelig selv utenfor klassen.
- Opprette klassekonstruktøren og initialisere variablene.
- Initialiser verdien av variabel real.
- Initialiser verdien av variabelen over.
- Slutten på konstruktørorganet.
- Overstyr betydningen av + -operatøren.
- Opprett datatyperesultatet av typen TestClass.
- Bruk + -operatøren med komplekse tall. Denne linjen vil legge til den virkelige delen av et tall til den virkelige delen av et annet nummer.
- Bruk + -operatøren med komplekse tall. Denne linjen vil legge til den imaginære delen av et tall til den imaginære delen av et annet nummer.
- Programmet returnerer verdien av det variable resultatet etter vellykket gjennomføring.
- Slutt på definisjonen av den nye betydningen av + operator, det vil si overbelastning.
- Ring utskriftsmetoden ().
- Skriv ut det nye komplekse nummeret etter tillegget på konsollen.
- Slutt på funksjonen for utskrift ().
- Slutten på kroppen til TestClass Class.
- Ringer til hovedfunksjonen ().
- Gi verdiene til både virkelige 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 den overbelastede + operatøren og lagre resultatet i variabel c3.
- Skriver ut verdien av variabelen c3 på konsollen.
- Slutten av kroppen til hovedfunksjonen ().
Sammendrag:
- Du kan spesifisere mer enn én betydning for en C ++ - operatør i ett omfang.
- Dette kalles operatøroverbelastning.
- Overbelastning av operatører gir en spesiell betydning av en operatør for en brukerdefinert datatype.
- Du kan omdefinere flertallet av C ++ - operatører gjennom operatøroverbelastning.
- Ikke alle C ++ -operatører kan overbelastes.
- For at en operatør skal bli overbelastet, må minst en av operandene være et brukerdefinert objekt.
- Bare eksisterende operatører kan bli overbelastet. Du kan ikke overbelaste nye operatører.