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.


Log in to reply