Share via


Sobrecarga de operadores

La palabra clave operator declara una función especificando el significado de operator-symbol 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.

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 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 sobrecarga el operador de suma y asignación, +=, se define una función denominada operator+=.

Operadores redefinibles

Operador

Nombre

Tipo

,

Coma

Binary

!

NOT lógico

Unario

!=

Desigualdad

Binary

%

Módulo

Binary

%=

Asignación y 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

*

Desreferencia de puntero

Unario

*=

Asignación y multiplicación

Binary

+

Adición

Binary

+

Unario más

Unario

++

Incremento 1

Unario

+=

Asignación y suma

Binary

Resta

Binary

Negación unaria

Unario

––

Decremento 1

Unario

–=

Asignación y resta

Binary

–>

Selección de miembro

Binary

–>*

Selección de puntero a miembro

Binary

/

División

Binary

/=

Asignación y división

Binary

<

Menor que

Binary

<<

Desplazamiento a la izquierda

Binary

<<=

Asignación y 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 y desplazamiento a la derecha

Binary

[ ]

Subíndice de matriz

^

OR exclusivo

Binary

^=

Asignación y OR exclusivo

Binary

|

OR inclusivo bit a bit

Binary

|=

Asignación y OR inclusivo bit a bit

Binary

||

OR lógico

Binary

~

Complemento a uno

Unario

delete

Delete

new

New

conversion operators

operadores de conversión

Unario

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

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

Name

.

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();
}

Salida

6.8, 11.2

Vea también

Referencia

Operadores de C++

Palabras clave de C++