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

C++ Inheritance member functions using static variables

本文关键字:继承 成员 函数 c++ 静态 变量      更新时间:2023-10-16

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

在Python中

:

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

输出所需的派生类变量" derived "。你知道我怎样才能在c++中获得相同的功能吗?我试过了,但最终得到了基类的类变量。

在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();
}

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

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();
}

注意printStaticVar不应该是静态的。


你也可以在getter中设置字符串static:

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();
}

另一种可能是:

class Base
{
  const std::string var;
public:
  Base(std::string s="Base") : var(s) {}
  void printVar() { std::cout << var << std::endl }
};
class Derived : public Base
{
public:
  Derived(std::string s="Derived") : Base(s) {}
};