Inkrementieren und Dekrementieren - Überladen von Operatoren in der C ++ - Programmierung

In diesem Beispiel lernen Sie, Inkrement ++ - und Dekrement - Operatoren in C ++ zu überladen.

Um dieses Beispiel zu verstehen, sollten Sie die folgenden C ++ - Programmierthemen kennen:

  • C ++ Klassen und Objekte
  • C ++ - Konstruktoren
  • Überladen von C ++ - Operatoren

In diesem Lernprogramm werden Inkrement ++ und Dekrement - Operator bestmöglich überladen, dh der Wert eines Datenelements wird um 1 erhöht, wenn der Operator ++ ein Objekt bearbeitet, und der Wert des Datenelements um 1 if - Operator verringert wird genutzt.

Beispiel 1: Präfix ++ Inkrement-Operator-Überladung ohne Rückgabetyp

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

Ausgabe

 i = 0 i = 1

Wenn das Objekt obj deklariert wird, ist der Wert des Datenelements i für das Objekt obj anfänglich 0 (der Konstruktor initialisiert i auf 0).

Wenn der ++ - Operator auf obj ausgeführt wird, wird die Operatorfunktion void operator++( )aufgerufen, wodurch der Wert des Datenelements i auf 1 erhöht wird.

Dieses Programm ist nicht vollständig in dem Sinne, dass Sie keinen Code verwenden können:

 obj1 = ++ obj;

Dies liegt daran, dass der Rückgabetyp der Operatorfunktion im obigen Programm ungültig ist.

Hier ist die kleine Modifikation des obigen Programms, damit Sie Code verwenden können obj1 = ++obj.

Beispiel 2: Überladen des Präfix Increment ++ - Operators mit Rückgabetyp

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

Ausgabe

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

Dieses Programm ähnelt dem obigen.

Der einzige Unterschied besteht darin, dass der Rückgabetyp der Operatorfunktion in diesem Fall Check ist, wodurch beide Codes verwendet werden können ++obj; obj1 = ++obj;. Dies liegt daran, dass die von der Operatorfunktion zurückgegebene Temperatur im Objekt obj gespeichert ist.

Da der Rückgabetyp der Operatorfunktion Check ist, können Sie den Wert von obj auch einem anderen Objekt zuweisen.

Beachten Sie, dass = (Zuweisungsoperator) nicht überladen werden muss, da dieser Operator bereits in der C ++ - Bibliothek überladen ist.

Beispiel 3: Postfix Increment ++ Operator Overloading

Das Überladen des Inkrementoperators bis zu diesem Punkt ist nur dann wahr, wenn es in Präfixform verwendet wird.

Dies ist die Modifikation des obigen Programms, damit dies sowohl für das Präfixformular als auch für das Postfixformular funktioniert.

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

Interessante Beiträge...