繁体   English   中英

静态成员变量在C ++中如何表现出多态性?

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

我想将静态字符串存储在子类中,以便它们不会在内存中重复。 可以这样吗? 我希望能够实例化两个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在基类中成为虚拟获取器,并在派生类中覆盖它以返回固定的字符串。

就是说,您的小示例类层次结构令人担忧,因为它混合了抽象级别。 无论CocaColaCompany也不IBM是改进Company ; 他们是特定的公司,因此应该是实例。 (这是“是”规则会使您误入歧途的典型方式。)另一方面, CocaColaSubsidiary可能是Company的子类。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM