Toename ++ en afname - Overbelasting door operator bij programmeren in C ++

In dit voorbeeld leert u de operators voor increment ++ en verlagen - in C ++ te overbelasten.

Om dit voorbeeld te begrijpen, moet u kennis hebben van de volgende C ++ programmeeronderwerpen:

  • C ++ klassen en objecten
  • C ++ Constructors
  • Overbelasting door C ++ operator

In deze zelfstudie worden de operator voor increment ++ en verlagen - op de best mogelijke manier overbelast, dat wil zeggen: verhoog de waarde van een gegevenslid met 1 als de operator ++ werkt op een object en verlaag de waarde van een gegevenslid met 1 als - operator is gebruikt.

Voorbeeld 1: Prefix ++ Increment Operator Overloading zonder retourtype

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

Uitvoer

 ik = 0 ik = 1

Wanneer het object obj wordt gedeclareerd, is de waarde van gegevenslid i voor object obj aanvankelijk 0 (constructor initialiseert i naar 0).

Wanneer de ++ operator wordt gebruikt op obj, wordt de operatorfunctie void operator++( )aangeroepen die de waarde van gegevenslid i verhoogt tot 1.

Dit programma is niet compleet in die zin dat je geen code kunt gebruiken:

 obj1 = ++ obj;

Het is omdat het retourtype van de operatorfunctie in het bovenstaande programma ongeldig is.

Hier is de kleine wijziging van het bovenstaande programma, zodat u code kunt gebruiken obj1 = ++obj.

Voorbeeld 2: Prefix Increment ++ operator overbelast met retourtype

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

Uitvoer

 ik = 0 ik = 0 ik = 1 ik = 1

Dit programma is vergelijkbaar met het bovenstaande.

Het enige verschil is dat het retourtype van de operatorfunctie Check is in dit geval, waardoor beide codes kunnen worden gebruikt ++obj; obj1 = ++obj;. Dit komt doordat temp die wordt geretourneerd door de operatorfunctie, wordt opgeslagen in object obj.

Aangezien het retourtype van de operatorfunctie Controleren is, kunt u de waarde van obj ook aan een ander object toewijzen.

Merk op dat = (toewijzingsoperator) niet overbelast hoeft te worden omdat deze operator al overbelast is in de C ++ - bibliotheek.

Voorbeeld 3: Postfix Increment ++ Operator Overloading

Overbelasting van de increment-operator tot nu toe is alleen waar als deze in prefix-vorm wordt gebruikt.

Dit is de wijziging van het bovenstaande programma om dit zowel voor het prefix-formulier als het postfix-formulier te laten werken.

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