Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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
tipo
operatoroperator-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 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
| 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