Increment ++ a Decrement - preťaženie operátora v programovaní v C ++

V tomto príklade sa naučíte preťažovať prírastky ++ a decrementy - operátory v C ++.

Aby ste pochopili tento príklad, mali by ste mať znalosti nasledujúcich programovacích tém C ++:

  • Triedy a objekty v C ++
  • Konštruktory C ++
  • Preťaženie operátora C ++

V tomto tutoriále sú operátory prírastku ++ a dekrementy - preťažené najlepším možným spôsobom, tj. Zvyšujú hodnotu dátového člena o 1, ak operátor ++ pracuje s objektom a znižujú hodnotu dátového člena o 1, ak - operátor sa používa.

Príklad 1: Prefix ++ Prírastok operátora preťaženia bez návratového typu

 #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; )

Výkon

 i = 0 i = 1

Na začiatku, keď je objekt obj deklarovaný, hodnota dátového člena i pre objekt obj je 0 (konštruktor inicializuje i na 0).

Keď je operátor ++ prevádzkovaný na obj, void operator++( )je vyvolaná funkcia operátora, ktorá zvyšuje hodnotu dátového člena i na 1.

Tento program nie je dokončený v tom zmysle, že nemôžete použiť kód:

 obj1 = ++ obj;

Je to preto, že návratový typ funkcie operátora vo vyššie uvedenom programe je neplatný.

Tu je malá modifikácia vyššie uvedeného programu, aby ste mohli použiť kód obj1 = ++obj.

Príklad 2: Preťaženie prírastku ++ ++ operátora preťažené návratovým typom

 #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; )

Výkon

 i = 0 i = 0 i = 1 i = 1

Tento program je podobný vyššie uvedenému.

Rozdiel je iba v tom, že návratový typ funkcie operátora je Check v tomto prípade, ktorý umožňuje použiť oba kódy ++obj; obj1 = ++obj;. Je to preto, že teplota vrátená z funkcie operátora je uložená v objekte obj.

Pretože návratový typ operátorskej funkcie je Check, môžete hodnotu objektu obj priradiť aj inému objektu.

Všimnite si, že = (operátor priradenia) nie je potrebné preťažovať, pretože tento operátor je už v knižnici C ++ preťažený.

Príklad 3: Preťaženie operátora Postfix Increment ++

Preťaženie operátora prírastku až do tohto bodu je pravdivé, iba ak sa použije vo forme predpony.

Toto je modifikácia vyššie uvedeného programu, aby táto práca fungovala pre predponu aj postfix.

 #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.

Zaujímavé články...