venerdì, febbraio 02, 2007

Singleton

Ciao a tutti,
oggi c'è stato il primo appello d'esame... a me è stato chiesto, durante la parte informatica della prova orale, di implementare la seguente classe "singleton" (vedere il collegamento nei Quaderni oppure qui).La particolarità di un singleton è che può esistere al più UNO ED UN SOLO oggetto di tipo singleton. Se leggete l codice infatti potete vedere che il costruttore è "private" e perciò non è possibile fare una dichiarazione standard, come del tipo.
singleton pluto;
Il costruttore viene chiamato con il metodo istanza() che fa parte esso stesso della classe singleton. Ma come è possibile usare un metodo di una classe se nessun oggetto del tipo di "classe" è stato dichiarato.
La soluzione sta nell'utilizzo della parola chiave static che in pratica permette che il metodo esista "di per sè" senza l'esistenza della classe ( e quindi può essere utilizzato anche senza dichiarare la classe stessa).
L'operatore di scope :: (come quello che si utilizza in std::cout) utilizzato in singleton::istanza() permette invece di mettersi nel namespace... (di cui posseggo solo un vago concetto intuitivo) della classe singelton.
Potete trovare l'header file singleton.h (con l'implementazione) e il programma singleton.cpp nei file del gruppo.
Ciao ciao

giovedì, febbraio 01, 2007

puntatori di una classe dentro la classe stessa

Mi e' stato chisto in merito all'esercizio numero 5 se si possa definire, come membro di una classe, un puntatore ad un oggetto del tipo della classe stessa.
La risposta e' SI, perche' un puntatore e' un indirizzo di memoria, quindi un numero: questo signifca che il compilatore riesce a definirlo prima di aver costruito la classe (insomma, non va in cortocircuito del tipo: per creare una classe devo prima creare i componenti che contengono la classe che contiene i componenti che contengono la classe che contiene i componenti...).