C ++ Operatør Overbelastning med eksempler

Innholdsfortegnelse:

Anonim

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:

#include 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;}

Produksjon:

Her er et skjermbilde av koden:

Kode Forklaring:

  1. Inkludert iostream header-fil i koden vår for å bruke funksjonene.
  2. Inkluder std navneområdet i programmet vårt for å bruke klassene uten å kalle det.
  3. Opprett en klasse som heter TestClass.
  4. Bruk modifikatoren for privat tilgang, som markerer et klassemedlem som privat tilgjengelig.
  5. Opprett et heltallsvar. 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 til å initialisere variabeltelleren til 5.
  8. Overbelaste betydningen av operatøren.
  9. Operatøren vil redusere verdien av variabelen x med 1.
  10. Slutten på operatørens overbelastningsseksjon. Operatøren har fått et nytt navn.
  11. Definere en funksjon med navnet Display () -funksjon.
  12. Skriv ut verdien av variabelantall sammen med annen tekst på konsollen når Display () -funksjonen kalles. } Markerer slutten på kroppen til Display () -funksjonen.
  13. Avslutningen på klassens kropp.
  14. Ring til hovedfunksjonen (). Programlogikken skal legges til innenfor denne funksjonen.
  15. Opprett en forekomst av klassen TestClass og gi den navnet tc.
  16. Dette vil ringe ugyldighetsoperatøren - () -funksjonen.
  17. Bruk holdningen til TestClass Class for å ringe til Display () -funksjonen.
  18. Funksjonen må returnere verdi etter vellykket fullføring.
  19. 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:

  1. Medlemsfunksjon
  2. Ikke-medlemsfunksjon
  3. 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:

  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 til innebygde typer (float, char, int, etc.).
  2. = Og & C ++ operatørene er overbelastet som standard. For eksempel kan du kopiere objektene i samme klasse direkte ved hjelp av = operatoren.
  3. Operatørprioritet endrer ikke tilknytning og prioritet til operatører. Du kan imidlertid endre rekkefølgen på evaluering ved hjelp av parentes.
  4. 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:

#include 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;}

Produksjon:

Her er et skjermbilde av koden:

Kode Forklaring:

  1. Inkludert iostream header-fil i koden vår for å bruke funksjonene.
  2. Inkluder std navneområdet i programmet vårt for å bruke klassene uten å kalle det.
  3. Opprett en klasse med navnet OperatorOverload.
  4. Bruk modifikatoren for privat tilgang, som markerer et klassemedlem som privat tilgjengelig.
  5. Opprett en heltallvariabel 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 til å initialisere variabelen x til 10.
  8. Overbelaste betydningen av ++ -operatøren.
  9. Operatøren vil øke verdien av variabelen x med 2.
  10. Slutten på operatørens overbelastningsseksjon. Operatøren har fått et nytt navn.
  11. Ringe til utskriftsfunksjonen ().
  12. Skriv ut verdien av variabelen x sammen med annen tekst på konsollen når funksjonen Print () kalles.
  13. Slutt på hoveddelen av Print () -funksjonen.
  14. Avslutningen på klassens kropp.
  15. Ring til hovedfunksjonen (). Programlogikken skal legges til innenfor denne funksjonen.
  16. Opprett en forekomst av OperatorOverload-klassen som heter ov.
  17. Dette vil kalle void operator ++ () -funksjonen.
  18. Bruk holdningen til klassen OperatorOverload for å ringe til Print () -funksjonen.
  19. Funksjonen må returnere verdi etter vellykket fullføring.
  20. 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:

  1. Inkludert iostream header-fil i programmet vårt for å kunne bruke funksjonene.
  2. Inkluder std navneområdet i programmet vårt for å kunne bruke klassene uten å kalle det.
  3. Opprett en klasse som heter TestClass. {Markerer begynnelsen på klassens kropp.
  4. Bruk modifikatoren for privat tilgang til å merke variabler som private, noe som betyr at de bare er tilgjengelige fra klassen.
  5. Definer to heltallvariabler, reelle og over.
  6. Bruk modifikatoren for offentlig tilgang til å merke konstruktøren som offentlig, noe som betyr at den vil være tilgjengelig selv utenfor klassen.
  7. Opprette klassekonstruktøren og initialisere variablene.
  8. Initialiser verdien av variabel real.
  9. Initialiser verdien av variabelen over.
  10. Slutten på konstruktørorganet.
  11. Overstyr betydningen av + -operatøren.
  12. Opprett datatyperesultatet av typen TestClass.
  13. 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.
  14. 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.
  15. Programmet returnerer verdien av det variable resultatet etter vellykket gjennomføring.
  16. Slutt på definisjonen av den nye betydningen av + operator, det vil si overbelastning.
  17. Ring utskriftsmetoden ().
  18. Skriv ut det nye komplekse nummeret etter tillegget på konsollen.
  19. Slutt på funksjonen for utskrift ().
  20. Slutten på kroppen til TestClass Class.
  21. Ringer til hovedfunksjonen ().
  22. 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.
  23. Utføre en operasjon med den overbelastede + operatøren og lagre resultatet i variabel c3.
  24. Skriver ut verdien av variabelen c3 på konsollen.
  25. 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.