I dette eksempel lærer du at overbelaste inkrement ++ og decrement - operatorer i C ++.
For at forstå dette eksempel skal du have kendskab til følgende C ++ programmeringsemner:
- C ++ klasser og objekter
- C ++ konstruktører
- C ++ Operatør Overbelastning
I denne vejledning overbelastes inkrement ++ og decrements - operator på den bedst mulige måde, dvs. øger værdien af et data medlem med 1, hvis ++ operator opererer på et objekt, og reducerer værdien af data medlem med 1 if - operator anvendes.
Eksempel 1: Præfiks ++ Increment Operator Overbelastning uden returtype
#include using namespace std; class Check ( private: int i; public: Check(): i(0) ( ) void operator ++() ( ++i; ) void Display() ( cout << "i=" << i << endl; ) ); int main() ( Check obj; // Displays the value of data member i for object obj obj.Display(); // Invokes operator function void operator ++( ) ++obj; // Displays the value of data member i for object obj obj.Display(); return 0; )
Produktion
i = 0 i = 1
Oprindeligt når objektet obj erklæres, er værdien af dataelement i for objekt obj 0 (konstruktør initialiserer i til 0).
Når ++ operatør betjenes på obj, void operator++( )
kaldes operatørfunktion, som øger værdien af datamedlem i til 1.
Dette program er ikke komplet i den forstand, at du ikke kan bruge kode:
obj1 = ++ obj;
Det skyldes, at returneringstypen for operatørfunktion i ovenstående program er ugyldig.
Her er den lille ændring af ovenstående program, så du kan bruge kode obj1 = ++obj
.
Eksempel 2: Præfiks Increment ++ -operatøroverbelastning med returtype
#include using namespace std; class Check ( private: int i; public: Check(): i(0) ( ) // Return type is Check Check operator ++() ( Check temp; ++i; temp.i = i; return temp; ) void Display() ( cout << "i = " << i << endl; ) ); int main() ( Check obj, obj1; obj.Display(); obj1.Display(); obj1 = ++obj; obj.Display(); obj1.Display(); return 0; )
Produktion
i = 0 i = 0 i = 1 i = 1
Dette program svarer til det ovenstående.
Den eneste forskel er, at operatørfunktionens returtype er Check i dette tilfælde, som gør det muligt at bruge begge koder ++obj;
obj1 = ++obj;
. Det er fordi, temp returneret fra operatørfunktionen er gemt i objekt obj.
Da returtypen for operatørfunktionen er Check, kan du også tildele værdien af obj til et andet objekt.
Bemærk, at = (tildelingsoperatør) ikke behøver at blive overbelastet, fordi denne operatør allerede er overbelastet i C ++ - biblioteket.
Eksempel 3: Postfix Increment ++ Operator Overbelastning
Overbelastning af stigningsoperatøren indtil dette punkt gælder kun, hvis den bruges i præfiksform.
Dette er ændringen af ovenstående program for at få dette til at fungere både for præfiksformular og postfixformular.
#include using namespace std; class Check ( private: int i; public: Check(): i(0) ( ) Check operator ++ () ( Check temp; temp.i = ++i; return temp; ) // Notice int inside barcket which indicates postfix increment. Check operator ++ (int) ( Check temp; temp.i = i++; return temp; ) void Display() ( cout << "i = "<< i <
Output
i = 0 i = 0 i = 1 i = 1 i = 2 i = 1
When increment operator is overloaded in prefix form;
Check operator ++ ()
is called but, when increment operator is overloaded in postfix form; Check operator ++ (int)
is invoked.
Notice, the int inside bracket. This int gives information to the compiler that it is the postfix version of operator.
Don't confuse this int doesn't indicate integer.
Example 4: Operator Overloading of Decrement -- Operator
Decrement operator can be overloaded in similar way as increment operator.
#include using namespace std; class Check ( private: int i; public: Check(): i(3) ( ) Check operator -- () ( Check temp; temp.i = --i; return temp; ) // Notice int inside barcket which indicates postfix decrement. Check operator -- (int) ( Check temp; temp.i = i--; return temp; ) void Display() ( cout << "i = "<< i <
Output
i = 3 i = 3 i = 2 i = 2 i = 1 i = 2
Also, unary operators like: !, ~ etc can be overloaded in similar manner.