En este ejemplo, aprenderá a sobrecargar los operadores de incremento ++ y decremento - en C ++.
Para comprender este ejemplo, debe tener el conocimiento de los siguientes temas de programación de C ++:
- Clases y objetos de C ++
- Constructores C ++
- Sobrecarga del operador C ++
En este tutorial, increment ++ y decrements - el operador se sobrecargan de la mejor manera posible, es decir, aumenta el valor de un miembro de datos en 1 si el operador ++ opera en un objeto y disminuye el valor del miembro de datos en 1 if - operator se utiliza.
Ejemplo 1: Sobrecarga del operador de incremento de prefijo ++ sin tipo de retorno
#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; )
Salida
yo = 0 yo = 1
Inicialmente, cuando se declara el objeto obj, el valor del miembro de datos i para el objeto obj es 0 (el constructor inicializa i en 0).
Cuando el operador ++ se opera en obj, void operator++( )
se invoca la función del operador, lo que aumenta el valor del miembro de datos i a 1.
Este programa no está completo en el sentido de que no puede usar código:
obj1 = ++ obj;
Es porque el tipo de retorno de la función de operador en el programa anterior es nulo.
Aquí está la pequeña modificación del programa anterior para que pueda usar el código obj1 = ++obj
.
Ejemplo 2: Operador de incremento de prefijo ++ sobrecarga con tipo de retorno
#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; )
Salida
yo = 0 yo = 0 yo = 1 yo = 1
Este programa es similar al anterior.
La única diferencia es que, el tipo de retorno de la función del operador es Check en este caso, lo que permite usar ambos códigos ++obj;
obj1 = ++obj;
. Esto se debe a que la temperatura devuelta por la función del operador se almacena en el objeto obj.
Dado que el tipo de retorno de la función del operador es Verificar, también puede asignar el valor de obj a otro objeto.
Tenga en cuenta que, = (operador de asignación) no necesita estar sobrecargado porque este operador ya está sobrecargado en la biblioteca C ++.
Ejemplo 3: Postfix Increment ++ Operator Overloading
La sobrecarga del operador de incremento hasta este punto solo es cierta si se usa en forma de prefijo.
Esta es la modificación del programa anterior para que esto funcione tanto para la forma de prefijo como para la forma de sufijo.
#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.