Compartilhar via


Sobrecarga de operador

A palavra-chave operator declara uma função especificando o que o símbolo do operador significa quando aplicado às instâncias de uma classe. Isso confere ao operador mais de um significado, ou seja, o "sobrecarrega". O compilador distingue entre os diversos significados de um operador examinando os tipos de seus operandos.

Sintaxe

typeoperatoroperator-symbol(parameter-list)

Comentários

Você pode redefinir a função da maioria dos operadores internos globalmente ou em uma classe de cada vez. Os operadores sobrecarregados são implementados como funções.

O nome de um operador sobrecarregado é operatorx, em que x é o operador conforme aparece na tabela a seguir. Por exemplo, para sobrecarregar o operador de adição, você define uma função chamada operator+. Da mesma forma, para sobrecarregar o operador de adição/atribuição, +=, você define uma função chamada operator+=.

Operadores redefiníveis

Operador Nome Tipo
, Vírgula Binário
! NOT lógico Unário
!= Desigualdade Binário
% Módulo Binário
%= Atribuição de módulo Binário
& AND bit a bit Binário
& Address-of Unário
&& AND lógico Binário
&= Atribuição AND de bit a bit Binário
( ) Chamada de função
( ) Operador cast Unário
* Multiplicação Binário
* Desreferência de ponteiro Unário
*= Atribuição de multiplicação Binário
+ Adição Binário
+ Mais unário Unário
++ Incremento 1 Unário
+= Atribuição de adição Binário
- Subtração Binário
- Negação unária Unário
-- Decremento 1 Unário
-= Atribuição de subtração Binário
-> Seleção de membro Binário
->* Seleção de ponteiro para membro Binário
/ Divisão Binário
/= Atribuição de divisão Binário
< Menor que Binário
<< Deslocamento à esquerda Binário
<<= Atribuição de deslocamento para a esquerda Binário
<= Menor ou igual a Binário
= Atribuição Binário
== Igualdade Binário
> Maior que Binário
>= Maior ou igual a Binário
>> Deslocamento à direita Binário
>>= Atribuição de deslocamento para a direita Binário
[ ] Subscrito de matriz
^ OR exclusivo Binário
^= Atribuição de OR exclusivo Binário
| OR inclusivo bit a bit Binário
|= Atribuição OR inclusivo de bit a bit Binário
|| OR lógico Binário
~ Complemento de um Unário
delete Excluir
new Novo
operadores de conversão operadores de conversão Unário

1 Existem duas versões dos operadores unários de incremento e decremento: pré-incremento e pós-incremento.

Consulte as Regras gerais de sobrecarga de operador para obter mais informações. As restrições nas diversas categorias de operadores sobrecarregados são descritas nos tópicos a seguir:

Os operadores mostrados na tabela a seguir não podem ser sobrecarregados. A tabela inclui os símbolos de pré-processador # e ##.

Operadores não redefiníveis

Operador Nome
. Seleção de membro
.* Seleção de ponteiro para membro
:: Resolução do escopo
? : Condicional
# Conversão de pré-processador em cadeia de caracteres
## Concatenação de pré-processador

Embora, de modo geral, os operadores sobrecarregados sejam chamados implicitamente pelo compilador quando são encontrados no código, eles podem ser invocados explicitamente da mesma maneira que qualquer função de membro ou de não membro é chamada:

Point pt;
pt.operator+( 3 );  // Call addition operator to add 3 to pt.

Exemplo

O exemplo a seguir sobrecarrega o operador + para adicionar dois números complexos e retorna o 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

Nesta seção

Confira também

Operadores internos C++, precedência e associatividade
Palavras-chave