Overload degli operatori
operator la parola chiave dichiara specificare di funzione cosa operator-symbol implementa una volta applicato alle istanze di una classe.Ciò fornisce l'operatore più di uno in altre parole, o “lo esegue l'overload di l„.Il compilatore fa distinzione tra i significati diversi di un operatore individuazione dei tipi di propri operandi.
type operator operator-symbol ( parameter-list )
Note
È possibile ridefinire la funzione della maggior parte degli operatori incorporati globalmente o nella classe-da-classe.Operatori di overload vengono implementati come funzioni.
il nome di un operatore di overload è operatorx, dove x l'operatore viene visualizzato nella tabella seguente.Ad esempio, eseguire l'overload dell'operatore di addizione, definire una funzione chiamata operator+.Analogamente, l'overload aggiungi/operatore di assegnazione, +=, definire una funzione chiamata operator+=.
operatori Redefinable
Operatore |
Nome |
Type |
---|---|---|
, |
Virgola |
Binary |
! |
NOT logico |
Unario |
!= |
Disuguaglianza |
Binary |
% |
Modulo |
Binary |
%= |
Assegnazione di modulo |
Binary |
& |
AND bit per bit |
Binary |
& |
Indirizzo-di |
Unario |
&& |
AND logico |
Binary |
&= |
AND bit per bit assegnazione |
Binary |
( ) |
Chiamata di funzione |
— |
( ) |
operatore di cast |
Unario |
* |
Moltiplicazione |
Binary |
* |
Dereferenziazione del puntatore |
Unario |
*= |
assegnazione di moltiplicazione |
Binary |
+ |
Addizione |
Binary |
+ |
unario più |
Unario |
++ |
incremento 1 |
Unario |
+= |
Assegnazione di addizione |
Binary |
– |
Sottrazione |
Binary |
– |
Negazione unaria |
Unario |
–– |
decremento 1 |
Unario |
–= |
assegnazione di sottrazione |
Binary |
–> |
Selezione dei membri |
Binary |
–>* |
selezione di Puntatore a membro |
Binary |
/ |
Divisione |
Binary |
/= |
assegnazione di divisione |
Binary |
< |
Minore di |
Binary |
<< |
Spostamento a sinistra |
Binary |
<<= |
Assegnazione di spostamento a sinistra |
Binary |
<= |
Minore o uguale a |
Binary |
= |
Assegnazione |
Binary |
== |
Uguaglianza |
Binary |
> |
Maggiore di |
Binary |
>= |
Maggiore o uguale a |
Binary |
>> |
Spostamento a destra |
Binary |
>>= |
Assegnazione di spostamento a destra |
Binary |
[ ] |
L'indice di matrice |
— |
^ |
OR esclusiva |
Binary |
^= |
Assegnazione OR esclusiva |
Binary |
| |
OR inclusivo bit per bit |
Binary |
|= |
Incluso l'operatore OR bit per bit assegnazione |
Binary |
|| |
OR logico |
Binary |
~ |
Complemento di uno |
Unario |
delete |
Delete |
— |
new |
New |
— |
conversion operators |
operatori di conversione |
Unario |
1 Due versioni dell'incremento e degli operatori di incremento e unari esiste: preincrement e postincrement.
vedere Regole generali per l'overload degli operatori per ulteriori informazioni.I vincoli sulle diverse categorie di operatori di overload sono descritti negli argomenti seguenti:
Gli operatori riportati nella tabella seguente non possono essere sottoposti a overload.La tabella include i simboli del preprocessore # e ##.
operatori di Nonredefinable
Operator |
Name |
. |
Selezione dei membri |
.* |
selezione di Puntatore a membro |
:: |
Risoluzione ambito |
? : |
Condizionale |
# |
Conversione del preprocessore da string |
## |
il preprocessore concatena |
Sebbene gli operatori di overload in genere essere chiamato in modo implicito dal compilatore quando vengono individuati nel codice, è possibile richiamare in modo esplicito la stessa modalità come qualsiasi funzione non membro o il membro è denominata:
Point pt;
pt.operator+( 3 ); // Call addition operator to add 3 to pt.
Esempio
L'esempio seguente è un metodo di overload + operatore per aggiungere due numeri complessi e restituisce il risultato.
// 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