004
31.03.2006, 10:19 Uhr
RHBaum
|
Zitat: |
statische variablen wie variablen die als public
|
das sind 2 komplett paar andere schuhe.
public / private sind zugriffsmodifizierer. Damit ueberwacht der compiler, das nur bestimmte module usw auf eine variable zugreifen koennen.
static, extern, global, volatile dagegen haben direkten einfluss auf ablage einer variablen.
Bei static wird zum beispiel immer nur eine Instanz der static variable, egal wieviele instanzen du von der eigentlichen klasse erzeugst, erstellt. Das hat folgende konsequenz, do kannst diese Variable auch ohne instanz der klasse verwenden.
Du kannst static variablen natuerlich auch private machen, dann haben nur friends, und methoden der klasse (statische und normale) zugriff auf die variable. Ausnahme ist die initialisierung, die muss von ausserhalb gehen.
Ansonsten kannst darauf zugreifen wie mit normalen members.... dein c.b ist vollkommen korrect. Aber du brauchst keine Instanz c um drauf zu kommen, in deinem fall waere test::b genau das gleiche ... nur ohne ne Instanz zu benutzen.
Viel intreassanter ist aber dieses verhalten:
C++: |
int main() { test c1,c2 c1.a=3; c1.b=7;
c2.a = 99; c2.b = 42; cout<<c1.a<<" "<<c1.b << " " << c2.a << " " << c2.b; return 0; }
|
Statische variablen sind damit eigentlich nur im namespace einer klasse versteckte globale variablen.
@Karldin
oO ewas hasst da wieder gemacht ^^ Welchen compiler nutzt du ? und zeig mal bisserl mehr code .... was genau hasst geaendert?
deine compiler meldung sagt dir sowas wie ... du legst grad eine Instanz von CTimer selber statisch an, und das kann er nich weil ihm der DCTor fehlt .... Zur erzeugung von ner Instanz brauchst die konstruktoren schon, nur du hasst static members in deiner klasse, dann macht es nicht viel sinn eine Instanz der klasse auch noch statisch anzulegen ....
Ciao ... |