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

时间:2013-09-25 10:46:59

标签: c++ static polymorphism

我想在子类中存储静态字符串,以便它们不会在内存中重复。可以这样做吗?我希望能够实例化两个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";
}

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

2 个答案:

答案 0 :(得分:10)

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

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

那就是说,你的小例子类层次结构令人担忧,因为它混合了抽象层次。 CocaColaCompanyIBM都不是Company的优化;他们是特定的公司,因此应该是实例。 (这是一种典型的方式,“是一个”规则可能会让你误入歧途。)另一方面,CocaColaSubsidiary可能是Company的子类。

答案 1 :(得分:1)

静态成员和类层次结构不会交互。多态性是关于更多的行为形式。但是,您无法在类层次结构中一次又一次声明静态成员。它应该被声明一次,并且可以在整个多态性层次结构中使用。