Dans cet exemple, vous apprendrez à surcharger les opérateurs incrémentation ++ et décrémentation - en C ++.
Pour comprendre cet exemple, vous devez avoir la connaissance des rubriques de programmation C ++ suivantes:
- Classes et objets C ++
- Constructeurs C ++
- Surcharge des opérateurs C ++
Dans ce didacticiel, l'opérateur incrément ++ et décrémente - est surchargé de la meilleure façon possible, c'est-à-dire augmente la valeur d'un membre de données de 1 si l'opérateur ++ opère sur un objet et diminue la valeur du membre de données de 1 si - opérateur est utilisé.
Exemple 1: Surcharge de l'opérateur d'incrémentation Prefix ++ sans type de retour
#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; )
Production
i = 0 i = 1
Initialement, lorsque l'objet obj est déclaré, la valeur du membre de données i pour l'objet obj est 0 (le constructeur initialise i à 0).
Lorsque l'opérateur ++ est utilisé sur obj, la fonction d'opérateur void operator++( )
est appelée, ce qui augmente la valeur du membre de données i à 1.
Ce programme n'est pas complet dans le sens où vous ne pouvez pas utiliser de code:
obj1 = ++ obj;
C'est parce que le type de retour de la fonction d'opérateur dans le programme ci-dessus est nul.
Voici la petite modification du programme ci-dessus pour que vous puissiez utiliser du code obj1 = ++obj
.
Exemple 2: surcharge de l'opérateur Prefix Increment ++ avec le type de retour
#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; )
Production
i = 0 i = 0 i = 1 i = 1
Ce programme est similaire à celui ci-dessus.
La seule différence est que, le type de retour de la fonction opérateur est Check dans ce cas qui permet d'utiliser les deux codes ++obj;
obj1 = ++obj;
. C'est parce que la température renvoyée par la fonction opérateur est stockée dans l'objet obj.
Étant donné que le type de retour de la fonction d'opérateur est Check, vous pouvez également affecter la valeur de obj à un autre objet.
Notez que, = (opérateur d'affectation) n'a pas besoin d'être surchargé car cet opérateur est déjà surchargé dans la bibliothèque C ++.
Exemple 3: Surcharge d'opérateur Postfix Increment ++
La surcharge de l'opérateur d'incrément jusqu'à ce point n'est vraie que si elle est utilisée sous forme de préfixe.
Il s'agit de la modification du programme ci-dessus pour que cela fonctionne à la fois pour la forme de préfixe et la forme de suffixe.
#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.