C++ Operator Overbelastning med eksempler
โก Smart opsummering
Operator-overbelastning i C++ lader dig omdefinere, hvordan indbyggede operatorer som + og == fungerer med dine egne klasser og objekter. Her lรฆrer du dens syntaks, tilgangene, hvilke operatorer der kan overbelastes, og de regler, der skal fรธlges.

Hvad er Operator overbelastning?
Ved brug af overbelastning af operatรธren in C++, kan du angive mere end รฉn betydning for en operator i รฉt omfang. Formรฅlet med operatรธroverbelastning er at give en speciel betydning af en operatรธr for en brugerdefineret datatype.
Ved hjรฆlp af operatรธroverbelastning kan du omdefinere stรธrstedelen af C++ operatรธrer. Du kan ogsรฅ bruge operatรธroverbelastning til at udfรธre forskellige operationer med รฉn operatรธr.
Syntaks
At overbelaste a C++ operatรธr, skal du definere en speciel funktion inde i klassen som fรธlger:
class class_name { ... .. ... public return_type operator symbol (argument(s)) { ... .. ... } ... .. ... };
Her er en forklaring pรฅ ovenstรฅende syntaks:
- Return_type er returtypen for funktionen.
- Dernรฆst nรฆvner du operatornรธgleordet.
- Symbolet angiver det operatรธrsymbol, der skal overbelastes. For eksempel +, -, <, ++.
- Argumentet eller argumenterne kan overfรธres til operatorfunktionen pรฅ samme mรฅde som funktioner.
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; }
Output:
Her er et skรฆrmbillede af koden:
Code Forklaring:
- Inkluderer iostream-headerfilen 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 ved navn TestClass.
- Brug den private adgangsmodifikator, som markerer et klassemedlem som privat tilgรฆngeligt.
- Opret et heltalsvariabelantal. Denne variabel vil vรฆre privat tilgรฆngelig.
- Brug offentlig adgangsmodifikator, som markerer et klassemedlem som privat tilgรฆngeligt.
- Brug en klassekonstruktรธr til at initialisere variabeltรฆlleren til 5.
- Overbelast betydningen af โโโ operatoren.
- Operatรธren vil formindske vรฆrdien af โโvariablen x med 1.
- Slut pรฅ operatรธrens overbelastningssektion. Operatรธren har fรฅet et nyt navn.
- Definere en funktion ved navn Display() funktion.
- Udskriv vรฆrdien af โโvariabelantal sammen med anden tekst pรฅ konsollen, nรฅr Display()-funktionen kaldes. } markerer slutningen af โโdisplay()-funktionens brรธdtekst.
- Slutningen af โโklassens krop.
- Kald funktionen main(). Programlogikken skal tilfรธjes i denne funktion.
- Opret en instans af klassen TestClass og giv den navnet tc.
- Dette kalder void-operatoren โ()-funktionen.
- Brug holdningen til TestClass Class til at kalde Display()-funktionen.
- Funktionen skal returnere vรฆrdi efter vellykket afslutning.
- Slutningen af โโkroppen af โโfunktionen main().
Forskellige tilgange til Operator Overbelastning ind C++
Du kan udfรธre operatรธroverbelastning ved at implementere en af โโfรธlgende typer funktioner:
- Medlemsfunktion
- Ikke-medlemsfunktion
- Ven funktion
- Operatรธrens overbelastningsfunktion kan vรฆre en medlemsfunktion, nรฅr en venstre operand er et objekt i klassen.
- Nรฅr venstre operand er anderledes, vil Operator overbelastningsfunktion bรธr vรฆre en ikke-medlemsfunktion.
Du kan gรธre operatรธrens overbelastningsfunktion til en vennefunktion, hvis den skal have adgang til de private og beskyttede klassemedlemmer.
Kan alle C++ Operators vรฆre overbelastet?
Nej. Det er der C++ operatรธrer, der ikke kan overbelastes.
De omfatter:
- :: -Scope resolution operator
- ?: -ternรฆr operator.
- . -medlemsvรฆlger
- Stรธrrelse pรฅ operatรธr
- * -medlemsmarkรธrvรฆlger
Ting at huske
- Med operatรธroverbelastning kan du omdefinere den mรฅde, en operatรธr kun fungerer pรฅ for de brugerdefinerede typer (objekter, strukturer). Du kan ikke bruge det til indbyggede typer (float, char, int osv.).
- = og & C++ operatรธrer er overbelastet som standard. For eksempel kan du kopiere objekterne i den samme klasse direkte ved at bruge =-operatoren.
- Operator forrang รฆndrer ikke den associative og forrang for operatรธrer. 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 scope resolution operator (::), member selection operator (.), member selection via en pointer to function operator (.*) og den ternรฆre operator (?:).
Regler for Operator overbelastning
Her er regler for Operator overbelastning:
- For at det kan fungere, skal mindst รฉn 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 ven-funktion. Sรฅdanne operatรธrer kan dog blive overbelastet ved hjรฆlp af medlemsfunktionen.
Sรฅdan overbelastes 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; }
Output:
Her er et skรฆrmbillede af koden:
Code Forklaring:
- Inkluderer iostream-headerfilen 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 offentlig adgangsmodifikator, som markerer et klassemedlem som privat tilgรฆngeligt.
- Brug en klassekonstruktรธr til at initialisere variabel x til 10.
- Overlรฆs betydningen af โโ++ operatoren.
- Operatรธren vil รธge vรฆrdien af โโvariabel x med 2.
- Slut pรฅ operatรธrens overbelastningssektion. Operatรธren har fรฅet et nyt navn.
- Kaldning af Print()-funktionen.
- Udskriv vรฆrdien af โโvariabel x sammen med anden tekst pรฅ konsollen, nรฅr funktionen Print() kaldes.
- Slutningen af โโbrรธdteksten af โโPrint()-funktionen.
- Slutningen af โโklassens krop.
- Kald funktionen main(). Programlogikken skal tilfรธjes i denne funktion.
- Opret en instans af OperatorOverload Klasse ved navn ov.
- Dette kalder void-operatoren ++()-funktionen.
- Brug holdningen til OperatorOverload-klassen for at kalde Print()-funktionen.
- Funktionen skal returnere vรฆrdi efter vellykket afslutning.
- Slutningen af โโkroppen af โโfunktionen 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(); }
Output:
Her er et skรฆrmbillede af koden:
Code Forklaring:
- Inkluderer iostream header-filen i vores program for at bruge dens funktioner.
- Inkluder std-navneomrรฅdet i vores program for at bruge dets klasser uden at kalde det.
- Opret en klasse ved navn TestClass. { markerer begyndelsen af โโklassens brรธdtekst.
- Brug den private adgangsmodifikator til at markere variabler som private, hvilket betyder, at de kun kan tilgรฅs fra klassen.
- Definer to heltalsvariabler, reelle og over.
- Brug public access modifier 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 variabler.
- Initialiser vรฆrdien af โโvariabel reel.
- Initialiser vรฆrdien af โโvariablen over.
- Slut pรฅ konstruktรธrlegemet.
- Tilsidesรฆt betydningen af โโ+-operatoren.
- Opret datatyperesultatet af typen TestClass.
- Brug operatoren + med komplekse tal. Denne linje tilfรธjer den reelle del af et tal til den reelle del af et andet tal.
- Brug operatoren + med komplekse tal. Denne linje tilfรธjer den imaginรฆre del af et tal til den imaginรฆre del af et andet tal.
- Programmet returnerer vรฆrdien af โโdet variable resultat ved vellykket udfรธrelse.
- Slutningen af โโdefinitionen af โโden nye betydning af + operator, det vil sige overbelastning.
- Kald print() metoden.
- Udskriv det nye komplekse tal efter tilfรธjelse pรฅ konsollen.
- Slutningen af โโbody of print()-funktionen.
- Slutningen af โโkroppen af โโTestClass Class.
- Kalder hoved()-funktionen.
- Passer vรฆrdierne af bรฅde reelle og komplekse dele, der skal tilfรธjes. Den fรธrste del af c1 vil blive tilfรธjet den fรธrste del af c2, det vil sige 9+4. Den anden del af c1 vil blive tilfรธjet til den anden del af c, det vil sige 5+3.
- Udfรธrelse af en operation ved hjรฆlp af overbelastet + operator og lagring af resultatet i variabel c3.
- Udskrivning af vรฆrdien af โโvariabel c3 pรฅ konsollen.
- Slutningen af โโhoveddelen af โโfunktionen main().



