nochmal static
-
Also:
Wenn eine Klasse eine Variable enthält, die static ist, heisst das, dass sie bei allen Instanzen dieser Klasse den gleichen Wert hat.
Wenn in einer Funktion eine Variable als static markiert ist, bedeutet das, dass sie im Hauptspeciher liegt, und somit ihren Wert zwischen den Funktionsaufrufen beibehält.Wenn ich aber dann in einer Funktion einer Klasse eine Variable mit static deklariere, hat diese dann in allen INstanzen der Klasse in der Funktion den gleichen Wert?
-
Lässt sich doch ganz einfach nachprüfen:
#include <iostream> struct Test { void test(int par=0) {static int a=par; std::cout<<"Wert der Variablen="<<a;} }; int main() { Test test1, test2; test1.test(); test2.test(4); }
-
Statiker schrieb:
....
Wenn ich aber dann in einer Funktion einer Klasse eine Variable mit static deklariere, hat diese dann in allen INstanzen der Klasse in der Funktion den gleichen Wert?Ja!

-
Statiker schrieb:
Wenn ich aber dann in einer Funktion einer Klasse eine Variable mit static deklariere, hat diese dann in allen INstanzen der Klasse in der Funktion den gleichen Wert?
Das ist dann eine static-Variable in einer Funktion, die Regeln dafür kennst du schon. Dass das eine Funktion in einer Klasse ist, ist uninteressant.
-
Also war das von egon2 falsch?
-
Nein, das nicht.
-
@Statiker: Du siehst das aus dem falschen Blickwinkel.
In Klassen gibt es keine Funktionen sondern nur Methoden. Somit ist auch klar welche Regel zutreffen muß.moagnus Beispiel ist etwas verwirrend da beim ersten Aufruf die Variable angelegt wird, beim zweiten existiert sie jedoch bereits.
#include <iostream> struct Test { void test(int par=0) {static int a=par;a++;std::cout<<"Wert der Variablen="<<a;} }; int main() { Test test1, test2; test1.test(); test2.test(4); }
-
Hm, vllt. eher sowas?
#include <iostream> struct Test { void test() {static int a=0; ++a; std::cout<<"Wert der Variablen="<<a<<std::endl;} }; int main() { Test test1, test2; test1.test(); test2.test(); }
-
Also, danke, habs endlich geschnallt.
Dann machts in dem Fall bei mir gar keinen Unterschied, wo ich die Variable deklariere (in der Klasse oder in der Funktion),
da es sich ja gleich verhält.