gar nicht würd ich sagen global und klasse schliessen sich meines wissens irgendwie aus. man will ja gerade die daten kapseln
Wen du zugriff auf members haben willst entweder ein methode anbieten die zugriff gewährt, public deklarieren oder friend verwenden -- ...fleißig wie zwei Weißbrote
MyClass globale_instanz_von_myclass; //bzw. MyClass globale_instanz_von_myclass(Parameter für den Konstruktor)
Die gute Art:
C++:
//MyClass.h
class MyClass { public: static MyClass global_instance; };
//MyClass.cpp MyClass MyClass::global_instance;
im guten Fall wird die globale Instanz als MyClass::global_instance angesprochen. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra
Allerdings sind beide Arten nicht sonderlich gut. Wozu brauchst du das denn? -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra
Das objekt einer Klasse wird in einer Methode erschaffen, muss aber auch in einer Methode einer anderen Klasse immer noch bestehen und nicht durch den Destruktor vernichtet werden, wenn die Methode durchlaufen wurde.
Hört sich für mich fast nach einem Singleton an. Ist es so, daß die die "Erschaffermethode" immer nur das gleiche Objekt zurückliefert oder aber bei jedem Aufruf ein neues Objekt kreiert? -- Gruß, virtual Quote of the Month Ich eß' nur was ein Gesicht hat (Creme 21)
Für Deine Aufgabenstellung benutzt man in der Regel Singletons: Ein signleton ist etwas, was 1. Nur einmal erstellt wird und - nach der Erzeugung erst bei Programmende destruiert wird. 2. Sich nicht kopieren läßt. In der Regel wird man eine solche Klasse mit einer Statischen Methode ausstatten, die einen Pointer oder eine Referenz auf eben dieses Objekt zurückliefert. zB so:
C++:
class Singleton private: Singleton (const Singleton&); // nicht erlaubt Singleton operator = (const Singleton&); // nicht erlaubt
static Singleton* instance; public: Singleton() { if (NULL!=instance) throw std::runtime_error("Attempt to instantiate Singleton twice"); instance = this; }
virtual ~Singleton() { instance = NULL; }
static Singleton& theInstance() { if (NULL==instance) new Singleton(); return *instance; } };
... Singleton::theInstance(); // gibt immer das gleiche Object zurück, erstellt es ggf.
-- Gruß, virtual Quote of the Month Ich eß' nur was ein Gesicht hat (Creme 21)Dieser Post wurde am 03.09.2003 um 12:41 Uhr von urform editiert.