Sobrecarga de operadores
La palabra clave de operator declara especificar la función qué operator-symbol significa cuando se aplica a las instancias de una clase.Esto proporciona el operador más de uno que significa, o “se sobrecarga”.El compilador distingue entre los diferentes significados de un operador examinando los tipos de sus operandos.
type operator operator-symbol ( parameter-list )
Comentarios
Puede volver a definir la función de la mayoría de los operadores integrados global o en función de la clase-por-clase.Implementan operadores sobrecargados como funciones.
El nombre de un operador sobrecargado es operatorx, donde es el operador x tal como aparece en la tabla siguiente.Por ejemplo, para sobrecargar el operador de suma, defina una función denominada operator+.De igual forma, sobrecarga suma y el operador de asignación, +=, define una función llamada operator+=.
operadores redefinibles
Operador |
Name |
Tipo |
---|---|---|
, |
Coma |
Binary |
! |
NOT lógico |
Unario |
!= |
Desigualdad |
Binary |
% |
Módulo |
Binary |
%= |
Asignación de módulo |
Binary |
& |
AND bit a bit |
Binary |
& |
dirección de |
Unario |
&& |
AND lógico |
Binary |
&= |
Asignación AND bit a bit |
Binary |
( ) |
Llamada a función |
— |
( ) |
Operador de conversión |
Unario |
* |
Multiplicación |
Binary |
* |
El puntero desreferenciación |
Unario |
*= |
Asignación de multiplicación |
Binary |
+ |
Adición |
Binary |
+ |
Operador unario más |
Unario |
++ |
Valor de incremento 1 |
Unario |
+= |
Asignación de suma |
Binary |
– |
Resta |
Binary |
– |
Negación unaria |
Unario |
–– |
decremento 1 |
Unario |
–= |
Asignación de resta |
Binary |
–> |
Selección de miembro |
Binary |
–>* |
selección de puntero a miembro |
Binary |
/ |
División |
Binary |
/= |
Asignación de división |
Binary |
< |
Menor que |
Binary |
<< |
Desplazamiento a la izquierda |
Binary |
<<= |
Asignación de desplazamiento a la izquierda |
Binary |
<= |
Menor o igual que |
Binary |
= |
Asignación |
Binary |
== |
Igualdad |
Binary |
> |
Mayor que |
Binary |
>= |
Mayor o igual que |
Binary |
>> |
Desplazamiento a la derecha |
Binary |
>>= |
Asignación de desplazamiento a la derecha |
Binary |
[ ] |
Subíndices de matriz |
— |
^ |
OR exclusiva |
Binary |
^= |
Exclusivo OR asignación |
Binary |
| |
OR inclusivo bit a bit |
Binary |
|= |
Inclusivo bit a bit OR asignación |
Binary |
|| |
OR lógico |
Binary |
~ |
Complemento de uno |
Unario |
delete |
Delete |
— |
new |
New |
— |
conversion operators |
operadores de conversión |
Unario |
1 Dos versiones de los operadores unarios de incremento y decremento existe: preincrement y postincrement.
Vea reglas generales para la sobrecarga de operadores para obtener más información.Restricciones a las distintas categorías de operadores sobrecargados se describen en los temas siguientes:
Los operadores mostrados en la tabla siguiente no se pueden sobrecargar.La tabla incluye los símbolos # y ##de preprocesador.
operadores de Nonredefinable
Operator |
Name |
. |
Selección de miembro |
.* |
selección de puntero a miembro |
:: |
Resolución de ámbito |
? : |
Condicional |
# |
Convert preprocesador a la cadena |
## |
el preprocesador concatena |
Aunque el compilador llamen a los operadores sobrecargados normalmente implícitamente cuando se encuentran en código, pueden invocar explícitamente de la misma manera que cualquier función miembro o que no sea miembro se denomina:
Point pt;
pt.operator+( 3 ); // Call addition operator to add 3 to pt.
Ejemplo
El ejemplo siguiente sobrecarga el operador de + para agregar dos números complejos y 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();
}
Output
6.8, 11.2