martedì 13 novembre 2012

Usare funzioni Amiche e Sovraccarico degli operatori

Le funzioni amiche e il sovraccarico degli operatori sono due concetti avanzati relativi alle classi. Le Funzioni Amiche hanno accesso completo ad ogni membro della classe. Il Sovraccarico degli Operatori permette di definire nuovi significati per gli operatori pre-costruiti e come si relazionano agli oggetti della propria classe. Come vedremo i due concetti possono essere usati assieme.

Presentare il programma Roditore Amico

Il programma Roditore Amico crea un oggetto Roditore. Quindi usa una funzione amica, la quale è in grado di accedere direttamente ai dati privati che sono immagazzinati, come il nome del roditore e quindi mostrarlo a schermo. Infine il programma mostra l'oggetto Roditore inviandolo come output standard. Il codice del programma è il seguente:

//Roditore amico
//Dimostra l'uso delle funzioni amiche e sovraccarico degli operatori
#include <iostream>
#include <string>
using namespace std;
class Roditore
    { //le funzioni amiche sono rese come globali per la classe Roditore
      friend void Spia(const Roditore& aRoditore);
      friend ostream& operator <<(ostream& os, const Roditore& aRoditore);
      public:
                Roditore (const string& nome= “ “): m_Nome(nome){}
      private:
                 string m_Nome;
    };
  void Spia(const Roditore& aRoditore);
  ostream& operator <<(ostream& os, const Roditore& aRoditore);
int main()
{
   Roditore ctopo(“Topolino”);
   cout << “Chiama Spia() per accedere a ctopo dati privati, m_Nome:\n”;
   Spia(ctopo);
    cout << “\n Invia oggetto ctopo a cout con operatore << :\n”;
    cout << ctopo;
   return 0;
  }
// funzione amica globale che può accedere a tutti i membri dell'oggetto Roditore
void Spia(const Roditore& aRoditore)
  { cout << aRoditore.m_Nome << endl;
     }
// funzione amica globale che può accedere a tutti i membri dell'oggetto Roditore e
// sovraccarica operatore << in modo da inviare oggetto Roditore a cout
ostream& operator <<(ostream& os, const Roditore& aRoditore)
 {
    os << “Oggetto Roditore - ”;
    os << “m_Nome: ” << aRoditore.m_Nome;
    return os;
  }

Nessun commento:

Posta un commento