Sobrecarga de operador
O operator palavra-chave declara uma função especificando o que operator-symbol significa que quando aplicada a instâncias de uma classe.Isso permite que o operador mais de um significado, ou "overloads" ele.O compilador faz distinção entre os significados diferentes de um operador, examinando os tipos dos operandos.
type operator operator-symbol ( parameter-list )
Comentários
Você pode redefinir a função dos operadores mais internos globalmente ou em uma base de classe a classe.Operadores sobrecarregados são implementados como funções.
O nome de um operador sobrecarregado é operatorx, onde x é o operador como ele 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 atribuição de adição/ +=, definir uma função chamada operator+=.
Operadores de redefiníveis
Operador |
Nome |
Tipo |
---|---|---|
, |
Vírgula |
Binário |
! |
NÃO lógico |
Unário |
!= |
Desigualdade |
Binário |
% |
MODULUS |
Binário |
%= |
Atribuição de módulo |
Binário |
& |
AND bit a bit |
Binário |
& |
Endereço de |
Unário |
&& |
E lógico |
Binário |
&= |
Atribuição de AND bit a bit |
Binário |
( ) |
Chamada de função |
— |
( ) |
Operador cast |
Unário |
* |
Multiplicação |
Binário |
* |
Referê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ário |
Unário |
–– |
Decréscimo 1 |
Unário |
–= |
Atribuição de subtração |
Binário |
–> |
Seleção de membro |
Binário |
–>* |
Seleção de ponteiro para membros |
Binário |
/ |
Divisão |
Binário |
/= |
Atribuição de divisão |
Binário |
< |
Menor que |
Binário |
<< |
Shift esquerda |
Binário |
<<= |
Atribuição de shift 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 |
>> |
Shift direita |
Binário |
>>= |
Atribuição de deslocamento à direita |
Binário |
[ ] |
Subscrito da matriz |
— |
^ |
OU exclusivo |
Binário |
^= |
Atribuição de OR exclusiva |
Binário |
| |
BITWISE OR inclusiva |
Binário |
|= |
Bit a bit inclusive atribuição de OR |
Binário |
|| |
OR lógico |
Binário |
~ |
Complemento de um |
Unário |
delete |
Delete |
— |
new |
New |
— |
conversion operators |
Operadores de conversão |
Unário |
1 Duas versões do operador unário incrementam e decrementar há operadores: preincrement e postincrement.
Consulte Regras gerais para a sobrecarga de operador para obter mais informações.As restrições nas várias categorias de operadores sobrecarregados são descritas nos seguintes tópicos:
Os operadores mostrados na tabela a seguir não podem ser sobrecarregados.A tabela inclui os símbolos de pré-processamento # e ##.
Operadores de Nonredefinable
Operator |
Name |
. |
Seleção de membro |
.* |
Seleção de ponteiro para membros |
:: |
Resolução de escopo |
? : |
Condicional |
# |
Pré-processador convert to string |
## |
Concatenar do pré-processador |
Embora a operadores sobrecarregados são geralmente chamados implicitamente pelo compilador quando eles são encontrados no código, eles podem ser chamados explicitamente da mesma maneira que qualquer membro ou não-membro função é chamada:
Point pt;
pt.operator+( 3 ); // Call addition operator to add 3 to pt.
Exemplo
Sobrecargas de exemplo a seguir a + operador adicionar complexo dois números 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();
}
Saída
6.8, 11.2