Hvad er operatøroverbelastning?
Ved hjælp af operatøroverbelastning i C ++ kan du angive mere end en betydning for en operatør i et omfang. Formålet med operatøroverbelastning er at give en operatør en særlig betydning for en brugerdefineret datatype.
Ved hjælp af overbelastning af operatører kan du omdefinere størstedelen af C ++ - operatørerne. Du kan også bruge operatøroverbelastning til at udføre forskellige operationer ved hjælp af en operatør.
I denne C ++ tutorial lærer du:
- Hvad er operatøroverbelastning?
- Syntaks
- Forskellige tilgange til overbelastning af operatører i C ++
- Kan alle C ++ operatører overbelastes?
- Ting at huske:
- Regler for overbelastning af operatører:
- Sådan overbelastes operatøren:
Syntaks
For at overbelaste en C ++ -operatør skal du definere en speciel funktion inde 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 returneringstypen for funktionen.
- Dernæst nævner du operatorens nøgleord.
- Symbolet betegner det operatørsymbol, der skal overbelastes. For eksempel +, -, <, ++.
- Argumenterne kan overføres til operatørfunktionen på samme måde som funktioner.
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;}
Produktion:
Her er et screenshot af koden:
Kode Forklaring:
- Omfatter iostream header-fil i vores kode for at bruge dens funktioner.
- Inkluder std navneområdet i vores program for at bruge dets klasser uden at kalde det.
- Opret en klasse med navnet TestClass.
- Brug den private adgangsmodifikator, som markerer et klassemedlem som privat tilgængeligt.
- Opret et antal tal for hele variabler. Denne variabel vil være privat tilgængelig.
- Brug den offentlige adgangsmodifikator, som markerer et klassemedlem som privat tilgængeligt.
- Brug en klassekonstruktør til at initialisere variabeltælleren til 5.
- Overbelaste betydningen af - operatøren.
- Operatøren reducerer værdien af variablen x med 1.
- Slutningen af operatørens overbelastningssektion Operatøren har fået et nyt navn.
- Definition af en funktion med navnet Display () -funktion.
- Udskriv værdien af variabelantal sammen med anden tekst på konsollen, når funktionen Display () kaldes. } Markerer afslutningen på displayfunktionens () -funktion.
- Afslutningen på klassens krop.
- Ring til hovedfunktionen (). Programmets logik skal tilføjes inden for denne funktion.
- Opret en forekomst af klassen TestClass, og giv den navnet tc.
- Dette kalder ugyldighedsoperatøren - () -funktionen.
- Brug holdningen til TestClass Class til at kalde Display () -funktionen.
- Funktionen skal returnere værdi efter vellykket afslutning.
- Slutningen af hoveddelen af funktionen main ().
Forskellige tilgange til overbelastning af operatører i C ++
Du kan udføre operatøroverbelastning ved at implementere en af følgende typer funktioner:
- Medlem funktion
- Ikke-medlem funktion
- Venfunktion
- Operatørens overbelastningsfunktion kan være en medlemsfunktion, når en venstre operand er et objekt i klassen.
- Når den venstre operand er forskellig, skal overbelastningsfunktionen til operatøren være en funktion, der ikke er medlem.
Du kan gøre operatørens overbelastningsfunktion til en venfunktion, hvis den har brug for adgang til de private og beskyttede klassemedlemmer.
Kan alle C ++ operatører overbelastes?
Nej. Der er C ++ - operatører, der ikke kan overbelastes.
De omfatter:
- :: -Skopopløsningsoperator
- ?: -interne operatør.
- . -medlemsvælger
- Operatørens størrelse
- * -medlem markørvælger
Ting at huske:
- Med operatøroverbelastning kan du omdefinere den måde, en operatør kun fungerer på de brugerdefinerede typer (objekter, strukturer). Du kan ikke bruge den til indbyggede typer (float, char, int osv.).
- = Og & C ++ operatorerne er overbelastet som standard. For eksempel kan du kopiere objekterne i samme klasse direkte ved hjælp af = operatoren.
- Operatørprioritet ændrer ikke operatørers associative og forrang. Du kan dog ændre rækkefølgen af evalueringen ved hjælp af parentes.
- Der er fire operatører, som du ikke kan overbelaste i C ++. De inkluderer omfangsopløsningsoperatøren (: :), medlemsvalgoperatør (.), Medlemsvalg gennem en markør til funktionsoperator (. *) Og den ternære operator (? :).
Regler for overbelastning af operatører:
Her er regler for overbelastning af operatører:
- For at det skal fungere, skal mindst en operand være et brugerdefineret klasseobjekt.
- Du kan kun overbelaste eksisterende operatører. Du kan ikke overbelaste nye operatører.
- Nogle operatører kan ikke overbelastes ved hjælp af en venfunktion. Sådanne operatører kan dog overbelastes ved hjælp af medlemsfunktion.
Sådan overbelastes 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;}
Produktion:
Her er et screenshot af koden:
Kode Forklaring:
- Omfatter iostream header-fil i vores kode for at bruge dens funktioner.
- Inkluder std navneområdet i vores program for at bruge dets klasser uden at kalde det.
- Opret en klasse med navnet OperatorOverload.
- Brug den private adgangsmodifikator, som markerer et klassemedlem som privat tilgængeligt.
- Opret en heltalsvariabel x. Denne variabel vil være privat tilgængelig.
- Brug den offentlige adgangsmodifikator, som markerer et klassemedlem som privat tilgængeligt.
- Brug en klassekonstruktør til at initialisere variablen x til 10.
- Overbelaste betydningen af ++ operatøren.
- Operatøren forøger værdien af variablen x med 2.
- Slutningen af operatørens overbelastningssektion Operatøren har fået et nyt navn.
- Opkald til funktionen Print ().
- Udskriv værdien af variabel x sammen med anden tekst på konsollen, når funktionen Print () kaldes.
- Slutningen af udskrivningsfunktionens hoveddel ().
- Afslutningen på klassens krop.
- Ring til hovedfunktionen (). Programmets logik skal tilføjes inden for denne funktion.
- Opret en forekomst af OperatorOverload-klassen ved navn ov.
- Dette kalder ugyldighedsoperatoren ++ () -funktionen.
- Brug holdningen til klassen OperatorOverload til at kalde funktionen Print ().
- Funktionen skal returnere værdi efter vellykket afslutning.
- Slutningen af hoveddelen af funktionen main ().
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();}
Produktion:
Her er et screenshot af koden:
Kode Forklaring:
- Omfatter iostream header-fil i vores program for at kunne bruge dens funktioner.
- Inkluder std navneområdet i vores program for at kunne bruge dets klasser uden at kalde det.
- Opret en klasse med navnet TestClass. {Markerer begyndelsen på klassens krop.
- Brug den private adgangsmodifikator til at markere variabler som private, hvilket betyder, at de kun kan tilgås inden for klassen.
- Definer to heltalsvariabler, reelle og over.
- Brug den offentlige adgangsmodifikator til at markere konstruktøren som offentlig, hvilket betyder at den vil være tilgængelig selv uden for klassen.
- Oprettelse af klassekonstruktøren og initialisering af variablerne.
- Initialiser værdien af variabel real.
- Initialiser værdien af variablen over.
- Slutningen af konstruktørorganet.
- Tilsidesættelse af + operatørens betydning.
- Opret datatyperesultatet af typen TestClass.
- Brug + -operatoren med komplekse tal. Denne linje tilføjer den reelle del af et tal til den rigtige del af et andet nummer.
- Brug + -operatoren med komplekse tal. Denne linje tilføjer den imaginære del af et tal til den imaginære del af et andet nummer.
- Programmet returnerer værdien af det variable resultat efter en vellykket udførelse.
- Slutningen af definitionen af den nye betydning af + operator, det vil sige overbelastning.
- Ring til udskrivningsmetoden ().
- Udskriv det nye komplekse nummer efter tilføjelse på konsollen.
- Slutningen af udskrivningsfunktionens () funktion.
- Slutningen af kroppen i TestClass-klassen.
- Ringer til hovedfunktionen ().
- Videregivelse af værdierne for både reelle og komplekse dele, der skal tilføjes. Den første del af c1 føjes til den første del af c2, det vil sige 9 + 4. Den anden del af c1 føjes til den anden del af c, det vil sige 5 + 3.
- Udførelse af en operation ved hjælp af den overbelastede + operator og lagring af resultatet i variabel c3.
- Udskrivning af værdien af variabel c3 på konsollen.
- Slutningen af hovedfunktionen ().
Resumé:
- Du kan angive mere end en betydning for en C ++ - operatør i et omfang.
- Dette kaldes operatøroverbelastning.
- Operatøroverbelastning giver en særlig betydning af en operatør for en brugerdefineret datatype.
- Du kan omdefinere de fleste C ++ - operatører gennem operatøroverbelastning.
- Ikke alle C ++ -operatører kan overbelastes.
- For at en operatør kan blive overbelastet, skal mindst en af operanderne være et brugerdefineret objekt.
- Kun eksisterende operatører kan overbelastes. Du kan ikke overbelaste nye operatører.