[英]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.