Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » static

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 <
000
16.03.2004, 18:23 Uhr
~Ich
Gast


Was bedeutet static?
Wenn ich in einer Klasse eine static Funktion habe kann ich z.B keine nicht static funktionen aus ihr aufrufen? oder Pointer die ich in der Klasse definiert habe? Was hat das mit dem Static auf sich?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
16.03.2004, 19:44 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


static members sind quasi attribute bzw. methoden der klasse wo hingegen nicht statische methoden und attribute für jedes object einmal existieren.

wenn du dir z.b. ein klasse pkw machen würdest und als eigenschaften von pkw sowas wie farbe und reifengrösse hättest wären das typische eigenschaften eines pkws.
wenn du so ne variable wie anzahl der erstellten objekte von der klasse pkw haben wolltest bräuchtest du was, was halt der klasse und nicht den objecten(instanzen) der klasse gehört. das würdest du dann static deklarieren...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
17.03.2004, 07:53 Uhr
virtual
Sexiest Bit alive
(Operator)


Bedeutung von static:

1. Bei Variablen:

1.a Innerhalb einer Funktion: Der Wert der Variablen bleibt zwischen zwei Funktionsaufrufen erhalten; ganz im gegensatz zu normalen automatischen variablen, die ihren Wert verlieren.
Beispiele:

C++:
void zaehler()
{
    static int counter = 0;
    count++;
    std::cout<<"Diese Funktion wurde zum "<<counter<<". Male aufgerufen"<<std::endl;


oder

C++:
char* my_itoa(int i)
{
    static char buffer[100];
    sprintf(buffer, "%d", i);
    return buffer;
}


Beide oben Beispiele lassen sich nur mit solchen static Variablen realisieren.

1.b Innerhalb einer Klasse: Die Variable ist unabhängig von einem Objekt. Im prinzip sind es verkappte globale Variablen, die eben den Gültigkeitsbereich Klasse haben:

C++:
class CounterClass
{
private:
     static int anzahlInstanzen;

public:
     CounterClass() { ++anzahlInstanzen; }
     virtual ~CounterClass() { --anzahlInstanzen; }
};


Im obigen Beispiel wird die Variable dazu verwendet, zu zählen wie viele Instanzen einer Klasse es gibt; dh anzahlInstanzen selbst gehört allen Objekten der Klasse.

1.c Außerhalb von Klassen und Funktionen: Die Variable ist nur innerhalb der Datei gültig, in der Sie definiert wurde:

C++:
/* a.cpp */
static int anzahl = 0;
...



C++:
/* b.cpp */
static int anzahl = 0;
...


Baust Du ein Projekt, in dem beide Dateien vorkommen geht es mit dem Static gut: Die Variable anzahl gibt es zweimal, einmal für die Datei a.cpp und zum anderen für b.cpp. Würdest Du das static fortlassen, würde der Gültigkeitsbereich der Variablen nicht mehr auf die Datei beschränkt sein. Der Linker würde dann später spucken und sagen, daß anzahl mehrfach definiert sei, vermute ich mal.

2. Bei Funktion/Methoden:

2.a Innerhalb einer Klasse
Die Funktion kann verwendet werden, ohne daß ein Objekt da ist. Beliebt zB für solche Sachen:

C++:
class Singleton
{
private:
     Singleton();
public:
     static Singleton& theInstance()
     {
          static Singleton singleton;
          return singleton;
     }
};

....
     Singleton& theSingleton = Singleton::theInstance();



2.b Außerhalb einer Klasse
Analog zu Fall 1.c
--
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
Seiten: > 1 <     [ 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: