4

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

或者使用带有多态基类的静态成员有问题吗?

4

2 回答 2

10

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

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

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

于 2013-09-25T10:51:43.190 回答
1

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

于 2013-09-25T11:48:37.200 回答