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