Curso de C++ (Página 24)

pagina023 Principal pagina025

CAPITULO 24 Operadores V: Operadores sobrecargados

Análogamente a las funciones sobrecargadas, los operadores también pueden sobrecargarse.

En realidad la mayoría de los operadores en C++ están sobrecargados. Por ejemplo el operador + realiza distintas acciones cuando los operandos son enteros, o en coma flotante. En otros casos esto es más evidente, por ejemplo el operador * se puede usar como operador de multiplicación o como operador de indirección.

C++ permite al programador sobrecargar a su vez los operadores para sus propios usos.

Sintaxis:

Prototipo:

<tipo> operator <operador> (<argumentos>);

Definición:

<tipo> operator <operador> (<argumentos>) {

<sentencias>;

}

Se pueden sobrecargar todos los operadores excepto ".", ".*", "::" y "?:".

Los operadores "=", "[]", "->", "()", "new" y "delete", sólo pueden ser sobrecargados cuando se definen como miembros de una clase.

Los argumentos deben ser tipos enumerados o estructurados: struct, union o class.

Ejemplo:

#include <iostream.h>
 
struct complejo { 
   float a,b; 
};
 
/* Prototipo del operador + para complejos */
complejo operator +(complejo a, complejo b);
 
int main() 
{ 
   complejo x = {10,32}; 
   complejo y = {21,12};
 
   complejo z; 
   z = x + y; /* Uso del operador sobrecargado + con complejos */
   cout << z.a << "," << z.b << endl; 
   return 0; 
}
 
/* Definición del operador + para complejos */
complejo operator +(complejo a, complejo b) 
{ 
   complejo temp = {a.a+b.a, a.b+b.b}; 
   return temp; 
} 

Al igual que con las funciones sobrecargadas, la versión del operador que see usará se decide después del análisis de los argumentos.

También es posible usar los operadores en su notación funcional:

z = operator+(x,y);

Pero donde veremos mejor toda la potencia de los operadores sobrecargados será cuando estudiemos las clases.


pagina023 Principal pagina025