C++继承成员函数使用静态变量

scr*_*Dog 5 c++ inheritance static-members

我试图将一些Python类转换为c ++但是遇到了一些麻烦.我有一个Base类,它有一个类(静态)变量和一个返回它的方法.我也有一个派生类,它会覆盖类(静态)变量,如此,

在Python中:

class Base:
   class_var = "Base"
   @classmethod
   def printClassVar(cls):
      print cls.class_var

class Derived(Base):
   class_var = "Derived"

d = Derived()
d.printClassVar()
Run Code Online (Sandbox Code Playgroud)

它打印出所需的派生类变量"Derived".知道如何在c ++中获得相同的功能吗?我已经尝试但最终获得Base类的类变量.

在c ++中

class Base
{
public:
    static void printStaticVar(){cout << s_var << endl;}
    static string s_var;
};
string Base::s_var = "Base";

class Derived : public Base
{
public:
    static string s_var;
};
string Derived::s_var = "Derived";

void main()
{
    Derived d;
    d.printStaticVar();
}
Run Code Online (Sandbox Code Playgroud)

Pub*_*bby 3

编写一个返回静态成员引用的虚函数:

class Base
{
public:
    void printStaticVar() {cout << get_string() << endl;}
    static string s_var;
    virtual string const& get_string() { return Base::s_var; }
};
string Base::s_var = "Base";

class Derived : public Base
{
public:
    static string s_var;
    virtual string const& get_string() { return Derived::s_var; }
};
string Derived::s_var = "Derived";

void main()
{
    Derived d;
    d.printStaticVar();
}
Run Code Online (Sandbox Code Playgroud)

请注意,这printStaticVar不应该是静态的。


您还可以将字符串设置static为 getter 中的本地字符串:

class Base
{
public:
    void printStaticVar() {cout << get_string() << endl;}
    virtual string const& get_string() { 
        static string str = "Base";
        return str;
    }
};

class Derived : public Base
{
public:
    virtual string const& get_string() { 
        static string str = "Derived";
        return str;
    }
};

void main()
{
    Derived d;
    d.printStaticVar();
}
Run Code Online (Sandbox Code Playgroud)