我想在子类中存储静态字符串,以便它们不会在内存中重复。可以这样做吗?我希望能够实例化两个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";
}
或者使用具有多态基类的静态成员是否存在问题?
答案 0 :(得分:10)
静态成员和类层次结构不会交互。多态性是关于个体的。
如果您想要一个特定于子类的公司名称并在那里修复,您应该在基类中使company_name
成为虚拟getter并在派生类中重写它以返回固定字符串。
那就是说,你的小例子类层次结构令人担忧,因为它混合了抽象层次。 CocaColaCompany
和IBM
都不是Company
的优化;他们是特定的公司,因此应该是实例。 (这是一种典型的方式,“是一个”规则可能会让你误入歧途。)另一方面,CocaColaSubsidiary
可能是Company
的子类。
答案 1 :(得分:1)
静态成员和类层次结构不会交互。多态性是关于更多的行为形式。但是,您无法在类层次结构中一次又一次声明静态成员。它应该被声明一次,并且可以在整个多态性层次结构中使用。