静态成员变量在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
一个虚拟 getter,并在派生类中重写它以返回固定字符串。
也就是说,你的小示例类层次结构令人担忧,因为它混合了抽象级别。CocaColaCompany
和IBM
都不是Company
的提炼;他们是特定的公司,因此应该是实例。(这是"是"规则可能使您误入歧途的典型方式。另一方面,CocaColaSubsidiary
可能是Company
的子类。
静态成员和类层次结构不交互。多态性是关于更多的行为形式。但是,您不能在类层次结构中一次又一次地声明静态成员。它应该声明一次,并且可以在整个多态性层次结构中使用。
相关文章:
- 多态性和功能结合
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- C++boost序列化多态性问题
- 如何查找哪个类对象位于数组的特定索引上(多态性)
- 如何在多线程中正确使用unique_ptr进行多态性?
- 具有智能指针的多态性
- 在 C++ 中在堆栈上创建实例时如何保持多态性?
- 继承/多态性 - 我是否被迫使用"protected"变量?
- C++ 多态性在代码::块 17.12 中不起作用
- C++ 泛型和多态性:这种模式可行吗?
- 为什么我们实际上需要运行时多态性?
- 如何在这个简单的最小示例中实现多态性?
- 如何使用静态多态性在 int 和指针类型之间进行转换?
- 基于PHP示例,与C 中数据结构一起工作的多态性示例
- 将泛型编程与多态性混合在一起
- 静态成员变量在C++中如何与多态性一起表现
- C++中的多态性不能与引用一起正常工作
- 为什么不能将多态性与值一起使用,而是引用和指针
- 与多态性一起使用的数组的奇怪输出