Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » objekt einer klasse

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ] [ 3 ] [ 4 ]
000
02.09.2003, 17:35 Uhr
~bussibär
Gast


wie kann ich ein "globales" objekt einer Klasse erstellen, dass nicht nur in einer Klasse bekannt ist?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
02.09.2003, 17:42 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


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
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
02.09.2003, 17:52 Uhr
0xdeadbeef
Gott
(Operator)


Die böse Art:

C++:
//MyClass.h
class MyClass {

};

extern MyClass globale_instanz_von_myclass;

//MyClass.cpp
#include "MyClass.h"

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
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
02.09.2003, 17:53 Uhr
0xdeadbeef
Gott
(Operator)


Allerdings sind beide Arten nicht sonderlich gut. Wozu brauchst du das denn?
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
03.09.2003, 09:17 Uhr
~bussibär
Gast


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.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
03.09.2003, 10:11 Uhr
virtual
Sexiest Bit alive
(Operator)


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)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
03.09.2003, 10:33 Uhr
~bussibär
Gast


nein, es soll nur ein objekt erschaffen werden, dass aber nicht gleich wieder terminiert wird.

ginge des mit new? wie?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
03.09.2003, 12:07 Uhr
0xdeadbeef
Gott
(Operator)


Was willst du denn eigentlich machen?
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
03.09.2003, 12:40 Uhr
virtual
Sexiest Bit alive
(Operator)


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.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
03.09.2003, 13:21 Uhr
~bussibär
Gast


kann man das objekt nicht einfach außerhalb jeglicher methode erschaffen, sozusagen global? so gehts jetzt nämlich
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ] [ 3 ] [ 4 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: