C++ Sobrecarga de los operadores ++ y --
C++ Sobrecarga de operadores y funciones
El operador de incremento (++) y el operador de decremento (--) son dos operadores unarios importantes en el lenguaje C++.
El siguiente ejemplo demuestra cómo sobrecargar el operador de incremento (++), incluyendo los usos de prefijo y postfijo. De manera similar, también puede intentar sobrecargar el operador de decremento (--).
Ejemplo
#include <iostream>
using namespace std;
class Time
{
private:
int hours;
int minutes;
public:
Time(){
hours = 0;
minutes = 0;
}
Time(int h, int m){
hours = h;
minutes = m;
}
void displayTime()
{
cout << "H: " << hours << " M:" << minutes <<endl;
}
Time operator++ ()
{
++minutes;
if(minutes >= 60)
{
++hours;
minutes -= 60;
}
return Time(hours, minutes);
}
Time operator++( int )
{
Time T(hours, minutes);
++minutes;
if(minutes >= 60)
{
++hours;
minutes -= 60;
}
return T;
}
};
int main()
{
Time T1(11, 59), T2(10,40);
++T1;
T1.displayTime();
++T1;
T1.displayTime();
T2++;
T2.displayTime();
T2++;
T2.displayTime();
return 0;
}
Al compilar y ejecutar el código anterior, se produce el siguiente resultado:
H: 12 M:0
H: 12 M:1
H: 10 M:41
H: 10 M:42
Nota: el int entre paréntesis es para indicar al compilador que se trata de una forma postfija, no de un número entero.
La sobrecarga de la forma prefijo invoca `operator ++ ()`, y la sobrecarga de la forma postfija invoca `operator ++ (int)`.
Ejemplo (sobrecarga de ++)
#include <iostream>
using namespace std;
class Check
{
private:
int i;
public:
Check(): i(0) { }
Check operator ++ ()
{
Check temp;
temp.i = ++i;
return temp;
}
Check operator ++ (int)
{
Check temp;
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();
obj1 = obj++;
obj.Display();
obj1.Display();
return 0;
}
El resultado de la ejecución es:
i = 0
i = 0
i = 1
i = 1
i = 2
i = 1
Ejemplo (sobrecarga de --)
#include <iostream>
using namespace std;
class Check
{
private:
int i;
public:
Check(): i(3) { }
Check operator -- ()
{
Check temp;
temp.i = --i;
return temp;
}
Check operator -- (int)
{
Check temp;
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();
obj1 = obj--;
obj.Display();
obj1.Display();
return 0;
}
El resultado de la ejecución es:
i = 3
i = 3
i = 2
i = 2
i = 1
i = 2
C++ Sobrecarga de operadores y funciones
Otras extensiones