static var in basisklasse
-
Hi!
folgendes:
#include <iostream> class B { public: static int val; void show() { std::cout << val << std::endl; }; }; class A1 : public B { public: A1(){ val++; }; }; class A2 : public B { public: A2(){ val++; }; }; int B::val = 0; int main() { A1 a1; a1.show(); A2 a2; a2.show(); a1.show(); }
Ist da das verhalten definiert? Oder können das kompiler unterschiedlich machen? Also ist es festgelegt, dass sich kindklassen static-variablen der eltern teilen? Wenn ich A1::val ändere, ändert sich dann auch A2::val ?
-
Ja, es gibt nur diese eine Variable 'B::val' (das ist so im Standard definiert), d.h. für die abgeleiteten Klassen werden keine neuen Variablen angelegt.
Jede Änderung innerhalb einer abgeleiteten Klasse wirkt sich dann direkt auf die Variable 'B::val' aus.