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
type
operator
operator-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 é operator
x, 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
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de