静态成员变量如何在C++中使用多态?

And*_*eas 4 c++ polymorphism static

我想在子类中存储静态字符串,以便它们不会在内存中重复.可以这样做吗?我希望能够实例化两个IBM,但只将字符串"IBM"放入内存中.

class Company {
    static const std::string company_name;
}
class CocaColaCompany : public Company {
    static const std::string company_name = "Coca Cola";
}
class IBM : public Company {
    static const std::string company_name = "IBM";
}
Run Code Online (Sandbox Code Playgroud)

或者使用具有多态基类的静态成员是否存在问题?

Seb*_*edl 10

静态成员和类层次结构不会交互.多态性是关于个体的.

如果您想要一个特定于子类并在那里修复的公司名称,您应该company_name在基类中创建一个虚拟getter并在派生类中重写它以返回固定字符串.

也就是说,你的小例子类层次结构令人担忧,因为它混合了抽象层次.既不是也CocaColaCompany没有IBM改进Company; 他们是特定的公司,因此应该是实例.(这是一种典型的方式,其中"是一个"规则可能会导致你误入歧途.)另一方面,CocaColaSubsidiary可能是一个子类Company.