giovedì 22 novembre 2012

Sovraccarico degli operatori

Il sovraccarico degli operatori può suonare come qualcosa di strano, da evitare a tutti i costi, ma non lo é. Il termine Operator Overloading permette di dare un nuovo significato agli operatori pre-costruiti usando le nuove tipologie di definizione. Ad esempio può essere sovraccaricato l'operatore * così che quando venga utilizzato nelle matrici 3D (oggetti istanziati da classi da voi definite), il risultato sia la moltiplicazione delle matrici tra loro. Per sovraccaricare un operatore è necessario definire una funzione chiamata operatorX, ove X è l'operatore da sovraccaricare. Questo è quanto viene realizzato nel programma Roditore Amico, con l'operatore <<.
ostream& operator <<(ostream& os, const Roditore& aRoditore)
{
os << “Oggetto Roditore - ”;
os << “m_Nome: ” << aRoditore.m_Nome;
return os;
}

La funzione sovraccarica l'operatore << così quando viene utilizzato l'oggetto Roditore con << in cout, viene mostrato il membro dati m_Nome. Sostanzialmente la funzione permette una facile visualizzazione dell'oggetto Roditore. La funzione accede direttamente al membro privato m_Nome, in quanto viene dichiarata amica della classe Roditore con la seguente linea di codice:
friend ostream& operator <<(ostream& os, const Roditore& aRoditore);

Questo significa che in main() è possibile utilizzare la sola sintassi cout << ctopo; tutto funziona in quanto cout è un tipo di ostream, il quale già sovraccarica << come pre-costruito.

Nessun commento:

Posta un commento