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
tipo
operator
sí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 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
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
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de