静态成员变量在C++中如何与多态性一起表现

How does a static member variable behave with polymorphism in C++?

本文关键字:多态性 一起 变量 C++ 静态成员      更新时间:2023-10-16

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

或者将静态成员与多态基类一起使用是否存在问题?

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

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

也就是说,你的小示例类层次结构令人担忧,因为它混合了抽象级别。CocaColaCompanyIBM都不是Company的提炼;他们是特定的公司,因此应该是实例。(这是"是"规则可能使您误入歧途的典型方式。另一方面,CocaColaSubsidiary可能是Company的子类。

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