Share via


Overload degli operatori

La parola chiave operator dichiara una funzione che specifica il significato di operator-symbol quando viene applicato a istanze di una classe. In tal modo è possibile assegnare più significati all'operatore, che diventa quindi operatore di overload. Il compilatore distingue tra i diversi significati di un operatore esaminando i tipi degli operandi.

type operator operator-symbol ( parameter-list )

Note

È possibile ridefinire la funzione della maggior parte degli operatori incorporati globalmente o classe per classe. Gli operatori di overload vengono implementati come funzioni.

Il nome di un operatore di overload è operatorx, in cui x è l'operatore come appare nella tabella seguente. Ad esempio per eseguire l'overload dell'operatore di addizione, viene definita una funzione denominata operator+. Analogamente, per eseguire l'overload dell'operatore di addizione/assegnazione +=, è necessario definire una funzione denominata operator+=.

Operatori ridefinibili

Operatore

Nome

Tipo

,

Virgola

Binario

!

NOT logico

Unario

!=

Disuguaglianza

Binario

%

Modulo

Binario

%=

Assegnazione modulo

Binario

&

AND bit per bit

Binario

&

Address-of

Unario

&&

AND logico

Binario

&=

Assegnazione AND bit per bit

Binario

( )

Chiamata di funzione

( )

Operatore cast

Unario

*

Moltiplicazione

Binario

*

Dereferenziazione del puntatore

Unario

*=

Assegnazione di moltiplicazione

Binario

+

Addizione

Binario

+

Più unario

Unario

++

Incremento 1

Unario

+=

Assegnazione di addizione

Binario

Sottrazione

Binario

Negazione unaria

Unario

––

Decremento 1

Unario

–=

Assegnazione di sottrazione

Binario

–>

Selezione dei membri

Binario

–>*

Selezione puntatore a membro

Binario

/

Divisione

Binario

/=

Assegnazione di divisione

Binario

<

Minore di

Binario

<<

Spostamento a sinistra

Binario

<<=

Assegnazione di spostamento a sinistra

Binario

<=

Minore o uguale a

Binario

=

Assegnazione

Binario

==

Uguaglianza

Binario

>

Maggiore di

Binario

>=

Maggiore o uguale a

Binario

>>

Spostamento a destra

Binario

>>=

Assegnazione di spostamento a destra

Binario

[ ]

Indice di matrice

^

OR esclusivo

Binario

^=

Assegnazione OR esclusivo

Binario

|

OR inclusivo bit per bit

Binario

|=

Assegnazione OR inclusivo bit per bit

Binario

||

OR logico

Binario

~

Complemento di uno

Unario

delete

Delete

new

New

conversion operators

operatori di conversione

Unario

1   Esistono due versioni degli operatori di incremento e decremento unari, ovvero incremento prefisso e incremento suffisso.

Per altre informazioni, vedere Regole generali per overload di operatori. Negli argomenti seguenti vengono descritti i vincoli per le diverse categorie di operatori di overload:

Gli operatori elencati nella tabella seguente non possono essere sottoposti a overload. La tabella include i simboli del preprocessore # e ##.

Operatori non ridefinibili

Operator

Name

.

Selezione dei membri

.*

Selezione puntatore a membro

::

Risoluzione ambito

? :

Condizionale

#

Preprocessore - Conversione in stringa

##

Preprocessore - Concatenamento

Anche se gli operatori di overload vengono in genere chiamati in modo implicito dal compilatore quando vengono rilevati nel codice, possono essere chiamati in modo esplicito in modo analogo a qualsiasi altra funzione di membro o non membro:

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

Esempio

Nell'esempio seguente viene eseguito l'overload dell'operatore + per sommare due numeri complessi e restituire 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

Vedere anche

Riferimenti

Operatori C++

Parole chiave C++