Compartir a través de


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

type operator operator-symbol ( parameter-list )

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 operator x, 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

Operator 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 a 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

Operator 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