簡體   English   中英

C ++繼承成員函數使用靜態變量

[英]C++ Inheritance member functions using static variables

我試圖將一些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()

它打印出所需的派生類變量“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();
}

編寫一個虛函數,返回對靜態成員的引用:

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 local:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM