Increment ++ a Decrement - přetížení operátora v programování v C ++

V tomto příkladu se naučíte přetížit přírůstek ++ a zmenšit operátory v C ++.

Abychom porozuměli tomuto příkladu, měli byste znát následující programovací témata C ++:

  • C ++ třídy a objekty
  • Konstruktory C ++
  • Přetížení operátora C ++

V tomto výukovém programu jsou inkrement ++ a dekrementy - operátor přetíženy nejlepším možným způsobem, tj. Zvyšují hodnotu datového člena o 1, pokud operátor ++ pracuje na objektu a snižuje hodnotu datového člena o 1, pokud - operátor se používá.

Příklad 1: Prefix ++ Přírůstek operátoru Přetížení 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ýstup

 i = 0 i = 1

Zpočátku, když je deklarován objekt obj, je hodnota datového člena i pro objekt obj 0 (konstruktor inicializuje i na 0).

Když je operátor ++ provozován na obj, void operator++( )je vyvolána funkce operátora, která zvyšuje hodnotu datového člena i na 1.

Tento program není úplný v tom smyslu, že nemůžete použít kód:

 obj1 = ++ obj;

Je to proto, že návratový typ funkce operátoru ve výše uvedeném programu je neplatný.

Zde je malá modifikace výše uvedeného programu, takže můžete použít kód obj1 = ++obj.

Příklad 2: Přetížení operátoru Prefix ++ ++ s návratovým typem

 #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ýstup

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

Tento program je podobný výše uvedenému.

Jediný rozdíl je v tom, že návratový typ funkce operátora je v tomto případě Check, který umožňuje použít oba kódy ++obj; obj1 = ++obj;. Je to proto, že teplota vrácená z funkce operátoru je uložena v objektu obj.

Protože návratový typ funkce operátoru je Zkontrolovat, můžete také přiřadit hodnotu obj jinému objektu.

Všimněte si, že = (operátor přiřazení) nemusí být přetížen, protože tento operátor je již v knihovně C ++ přetížen.

Příklad 3: Přetížení operátoru Postfix Increment ++

Přetížení operátoru přírůstku až do tohoto bodu je pravdivé, pouze pokud je použit ve formě předpony.

Jedná se o modifikaci výše uvedeného programu, aby to fungovalo jak pro předponu, tak pro 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.

Zajímavé články...