Sobrecarga de operadores

La palabra clave operator declara una función especificando el significado del símbolo de operador cuando se aplica a las instancias de una clase. Esto proporciona al operador más de un significado, o lo "sobrecarga". El compilador distingue entre los diferentes significados de un operador examinando los tipos de sus operandos.

Sintaxis

tipooperatorsímbolo de operador(lista de parámetros)

Comentarios

Se puede redefinir la función de la mayoría de los operadores integrados de forma global o clase a clase. Los operadores sobrecargados se implementan como funciones.

El nombre de un operador sobrecargado es operatorx, donde x es el operador tal como aparece en la tabla siguiente. Por ejemplo, para sobrecargar el operador de suma, se define una función denominada operator+. Del mismo modo, para sobrecargar el operador de suma/asignación, +=, se define una función denominada operator+=.

Operadores redefinibles

Operador Nombre Tipo
, Coma Binario
! NOT lógico Unario
!= Desigualdad Binario
% Módulo Binario
%= Asignación y módulo Binario
& AND bit a bit Binario
& Dirección de Unario
&& Y lógico Binario
&= Asignación AND bit a bit Binario
( ) Llamada de función
( ) Operador de conversión Unario
* Multiplicación Binario
* Desreferencia de puntero Unario
*= Asignación y multiplicación Binario
+ Suma Binario
+ Unario más Unario
++ Incremento 1 Unario
+= Asignación y suma Binario
- Resta Binario
- Negación unaria Unario
-- Decremento 1 Unario
-= Asignación y resta Binario
-> Selección de miembro Binario
->* Selección de puntero a miembro Binario
/ División Binario
/= Asignación y división Binario
< Menor que Binario
<< Desplazamiento a la izquierda Binario
<<= Asignación y desplazamiento a la izquierda Binario
<= Menor o igual que Binario
= Cesión Binario
== Igualdad Binario
> Mayor que Binario
>= Mayor o igual que Binario
>> Desplazamiento a la derecha Binario
>>= Asignación y desplazamiento a la derecha Binario
[ ] Subíndice de matriz
^ OR exclusivo Binario
^= Asignación y OR exclusivo Binario
| OR inclusivo bit a bit Binario
|= Asignación y OR inclusivo bit a bit Binario
|| O lógico Binario
~ Complemento a uno Unario
delete Eliminar
new Nuevo
operadores de conversión operadores de conversión Unario

1 Existen dos versiones de los operadores de incremento y decremento unarios: preincremento y postincremento.

Vea Reglas generales de la sobrecarga de operadores para obtener más información. En los temas siguientes se describen las restricciones de las distintas categorías de operadores sobrecargados:

Los operadores que se muestran en la tabla siguiente no se pueden sobrecargar. La tabla incluye los símbolos de preprocesador # y ##.

Operadores no redefinibles

Operador Nombre
. Selección de miembro
.* Selección de puntero a miembro
:: Resolución de ámbito
? : Condicional
# Conversión de preprocesador en una cadena
## Concatenación de preprocesadores

Aunque el compilador suele llamar implícitamente a los operadores sobrecargados cuando se encuentran en el código, se pueden invocar explícitamente de la misma manera que cualquier función miembro o no miembro:

Point pt;
pt.operator+( 3 );  // Call addition operator to add 3 to pt.

Ejemplo

En el ejemplo siguiente se sobrecarga el operador + para sumar dos números complejos y se devuelve el resultado.

// operator_overloading.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;

struct Complex {
   Complex( double r, double i ) : re(r), im(i) {}
   Complex operator+( Complex &other );
   void Display( ) {   cout << re << ", " << im << endl; }
private:
   double re, im;
};

// Operator overloaded using a member function
Complex Complex::operator+( Complex &other ) {
   return Complex( re + other.re, im + other.im );
}

int main() {
   Complex a = Complex( 1.2, 3.4 );
   Complex b = Complex( 5.6, 7.8 );
   Complex c = Complex( 0.0, 0.0 );

   c = a + b;
   c.Display();
}
6.8, 11.2

En esta sección

Consulte también

Operadores integrados de C++, precedencia y asociatividad
Palabras clave