Ebben a példában megtanulhatja a ++ növekmény és a decrement - operátorok túlterhelését a C ++ nyelven.
A példa megértéséhez ismernie kell a következő C ++ programozási témákat:
- C ++ osztályok és objektumok
- C ++ kivitelezők
- C ++ kezelő túlterhelése
Ebben az oktatóanyagban a ++ növekmény és a csökkentés - az operátor a lehető legjobb módon van túlterhelve, azaz növelje egy adattag értékét 1-gyel, ha a ++ operátor működik egy objektumon, és csökkentse az adattag értékét 1-gyel, ha - operátor használt.
1. példa: Prefix ++ növekmény operátor túlterhelés visszatérési típus nélkül
#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; )
Kimenet
i = 0 i = 1
Kezdetben az obj objektum deklarálásakor az i objektum objektum értéke 0 (a konstruktor i-re inicializálja i-t).
Amikor a ++ operátort objektumon működtetjük, akkor meghívjuk az operátor funkciót void operator++( )
, amely 1-re növeli az i adattag értékét.
Ez a program nem teljes abban az értelemben, hogy nem használhatja a kódot:
obj1 = ++ obj;
Ez azért van, mert a fenti program operátori függvényének visszatérési típusa érvénytelen.
Itt van a fenti program kis módosítása, hogy használhassa a kódot obj1 = ++obj
.
2. példa: Prefix Increment ++ operátor túlterhelés visszatérési típussal
#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; )
Kimenet
i = 0 i = 0 i = 1 i = 1
Ez a program hasonló a fenti programhoz.
Az egyetlen különbség az, hogy a kezelő függvény visszatérési típusa a Check ebben az esetben, amely lehetővé teszi mindkét kód használatát ++obj;
obj1 = ++obj;
. Ez azért van, mert az operátor függvényből visszaadott hőmérséklet az obj objektumban van tárolva.
Mivel az operátor függvény visszatérési típusa Check, ezért az obj értékét másik objektumhoz is rendelheti.
Figyelje meg, hogy a = (hozzárendelés operátort) nem kell túlterhelni, mert ez az operátor már túlterhelt a C ++ könyvtárban.
3. példa: Postfix növekmény ++ Operátor túlterhelés
Az inkrement operátor ezen pontig történő túlterhelése csak akkor igaz, ha előtag formában használják.
Ez a fenti program módosítása annak érdekében, hogy ez mind az előtag, mind a postfix formában működjön.
#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.