[ Robinsonk@ @ 27.11.2003. 23:25 ] @
Kako da deklarisem klasu tako da se moze definisati tacno jedan objekat te klase?! Znam da treba uvesti neki brojac, ali mi treba tacno kako da to izvedem i to do ujutro do 11. |
[ Robinsonk@ @ 27.11.2003. 23:25 ] @
[ Cybernoid II @ 27.11.2003. 23:31 ] @
[ filmil @ 27.11.2003. 23:31 ] @
Citat: Robinsonk@: Kako da deklarisem klasu tako da se moze definisati tacno jedan objekat te klase?! Znam da treba uvesti neki brojac, ali mi treba tacno kako da to izvedem i to do ujutro do 11. Ne treba uvesti nikakav brojač. U pitanju je takozvani singleton design pattern. Ideja je da se napravi klasa sa privatnim konstruktorom i u njoj tzv. Factory metoda koja deklariše jedan statički primerak te klase. Nema brojača, nema ničega. Potraži na guglu gore navedene ključne reči, čisto da ne ispadne da prepisuješ, već da ipak stoji i uložen trud. Vikipedija na primer daje spisak design patterna pa možeš potražiti i tamo. f [ Robinsonk@ @ 27.11.2003. 23:38 ] @
Hvala obojici. Sjetila sam se da treba konstruktor da bude privatan, ali sam mislila da je neophodan brojac. Sad cu da pogledam.
Hvala. [ Dragi Tata @ 28.11.2003. 00:17 ] @
Verovatno najkompletnija implementacija Singletona u C++u može se naći u Loki biblioteci:
http://sourceforge.net/projects/loki-lib [ NastyBoy @ 28.11.2003. 08:37 ] @
Evo kratkih makroa za definisanje singletona. Ovo nije najbolje resenje, ali moze da posluzi...
#define DECLARE_SINGLETON(n) static n& GetInstance(); private: n(); virtual ~n(); public: #define IMPLEMENT_SINGLETON(n) n& n::GetInstance() { static n instance; return instance; }; Stavi jedan u .h fajl, implementaciju u .cpp i to ti je to :) [ Robinsonk@ @ 28.11.2003. 08:59 ] @
A kako da kreiram tacno n objekata? Tada mi pretpostavljam treba brojac, u konstruktoru valjda?
[ NastyBoy @ 28.11.2003. 09:52 ] @
Pojasni malo "n objekata"...
Mozes da stavis nesto kao "static int m_nObjectCount" u klasu da pratis broj instanci, ali tvoj prvi zhtev i ovaj nemaju mnogo dodirnih tacaka. Singleton ti je kao pomocno sredstvo koje ti omogucava da ne brines mnogo oko toga ko je i kada instancirao klasu. Uvek ces dobiti istu instancu kad pokusas da kreiras novu. Ali, ako kreiras "n" objekata, sta ocekujes da dobijes kad instanciras n+1 objekat? Pointer na vec postojeci (koji?) objekat ili NULL? Zavisi sta hoces da postignes, verovatno ti je najbolje da za tu klasu obezbedis i neku vrstu container klase koja bi cuvala pointere na instancirane objekte... Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|