Incremento ++ e decremento - Sovraccarico degli operatori nella programmazione C ++

In questo esempio, imparerai a sovraccaricare gli operatori increment ++ e decrement - in C ++.

Per comprendere questo esempio, è necessario conoscere i seguenti argomenti di programmazione C ++:

  • Classi e oggetti C ++
  • Costruttori C ++
  • Sovraccarico degli operatori C ++

In questo tutorial, gli operatori increment ++ e decrements - vengono sovraccaricati nel miglior modo possibile, ovvero aumenta il valore di un membro dati di 1 se l'operatore ++ opera su un oggetto e diminuisce il valore del membro dati di 1 operatore if - viene usato.

Esempio 1: Overload dell'operatore di incremento prefisso ++ senza tipo restituito

 #include using namespace std; class Check ( private: int i; public: Check(): i(0) ( ) void operator ++() ( ++i; ) void Display() ( cout << "i=" << i << endl; ) ); int main() ( Check obj; // Displays the value of data member i for object obj obj.Display(); // Invokes operator function void operator ++( ) ++obj; // Displays the value of data member i for object obj obj.Display(); return 0; )

Produzione

 io = 0 io = 1

Inizialmente, quando viene dichiarato l'oggetto obj, il valore del membro dati i per l'oggetto obj è 0 (il costruttore inizializza i su 0).

Quando l'operatore ++ viene utilizzato su obj, void operator++( )viene richiamata la funzione operatore che aumenta il valore del membro dati i a 1.

Questo programma non è completo nel senso che non puoi usare il codice:

 obj1 = ++ obj;

È perché il tipo di ritorno della funzione operatore nel programma sopra è nullo.

Ecco la piccola modifica del programma sopra in modo da poter utilizzare il codice obj1 = ++obj.

Esempio 2: operatore di prefisso Increment ++ sovraccarico con tipo restituito

 #include using namespace std; class Check ( private: int i; public: Check(): i(0) ( ) // Return type is Check Check operator ++() ( Check temp; ++i; temp.i = i; return temp; ) void Display() ( cout << "i = " << i << endl; ) ); int main() ( Check obj, obj1; obj.Display(); obj1.Display(); obj1 = ++obj; obj.Display(); obj1.Display(); return 0; )

Produzione

 io = 0 io = 0 io = 1 io = 1

Questo programma è simile a quello sopra.

L'unica differenza è che, in questo caso, il tipo di ritorno della funzione operatore è Verifica che consente di utilizzare entrambi i codici ++obj; obj1 = ++obj;. È perché, temp restituito dalla funzione operator è memorizzato nell'oggetto obj.

Poiché il tipo di ritorno della funzione operatore è Check, puoi anche assegnare il valore di obj a un altro oggetto.

Si noti che, = (operatore di assegnazione) non ha bisogno di essere sovraccaricato perché questo operatore è già sovraccarico nella libreria C ++.

Esempio 3: Overload dell'operatore Increment ++ Postfix

Il sovraccarico dell'operatore di incremento fino a questo punto è vero solo se utilizzato in forma di prefisso.

Questa è la modifica del programma sopra per fare in modo che funzioni sia per il modulo prefisso che per il modulo suffisso.

 #include using namespace std; class Check ( private: int i; public: Check(): i(0) ( ) Check operator ++ () ( Check temp; temp.i = ++i; return temp; ) // Notice int inside barcket which indicates postfix increment. Check operator ++ (int) ( Check temp; temp.i = i++; return temp; ) void Display() ( cout << "i = "<< i < 

Output

 i = 0 i = 0 i = 1 i = 1 i = 2 i = 1

When increment operator is overloaded in prefix form; Check operator ++ () is called but, when increment operator is overloaded in postfix form; Check operator ++ (int) is invoked.

Notice, the int inside bracket. This int gives information to the compiler that it is the postfix version of operator.

Don't confuse this int doesn't indicate integer.

Example 4: Operator Overloading of Decrement -- Operator

Decrement operator can be overloaded in similar way as increment operator.

 #include using namespace std; class Check ( private: int i; public: Check(): i(3) ( ) Check operator -- () ( Check temp; temp.i = --i; return temp; ) // Notice int inside barcket which indicates postfix decrement. Check operator -- (int) ( Check temp; temp.i = i--; return temp; ) void Display() ( cout << "i = "<< i < 

Output

 i = 3 i = 3 i = 2 i = 2 i = 1 i = 2

Also, unary operators like: !, ~ etc can be overloaded in similar manner.

Articoli interessanti...