int a = 25;
int b = 23;
int c = 0;
. . . . .
c = a + b;
El compilador sabe que es un tipo int y como operar con él. Pero cuando creamos un tipo propio, por ejemplo la clase Punto
//Definición de la clase Punto
class Punto
{
private: //Miembros privados de la clase
int _x;
int _y;
public: //Miembros públicos de la clase
void SetX(const int valor);
void SetY(const int valor);
int GetX(void);
int GetY(void);
};
Punto a;
Punto b;
Punto c;
. . . . .
c = a + b;
El compilador no tiene ni idea de como debe hacer la suma ni la asignación. Para solucionar esto, C++ nos permite sobrecargar el operador +.
Un operador sobrecargado es una función que recibe un argumento de la misma clase y devuelve un objeto de la misma clase.
Para sobrecargar un operador, se antecede la palabra operator al operador y entre paréntesis, como cualquier otra función, la lista de parámetros.
Para sobrecargar el operador + de la clase Punto escribiríamos:
class Punto
{
private: //Miembros privados de la clase
int _x;
int _y;
public: //Miembros públicos de la clase
Punto operator+(Punto); //operador de suma sobrecargado
. . . . .
Punto Punto::operator+(Punto a)
{
Punto aux;
aux._x = _x + a.GetX();
aux._y = _y + a.GetY();
return aux;
}
Punto Punto::operator+(Punto a)
{
Punto aux;
aux._x = _x + a.GetX();
aux._y = _y + a.GetY();
return aux;
}
Punto a;
Punto b;
Punto c;
. . . . .
c = a + b;
C++ nos permite sobrecargar lo siguientes operadores:
+
|
-
|
*
|
/
|
^
|
&
|
|
|
+=
|
-=
|
*=
|
/=
|
^=
|
&=
|
|=
|
~
|
!
|
=
|
<
|
>
|
<<
|
>>
|
>>=
|
<<=
|
==
|
!=
|
<=
|
>=
|
&&
|
||
| ++ | -- | ->* | , | -> | [] |
()
|
new
|
delete
|
new[]
|
delete[]
|
||