静态成员和继承

3 c++ inheritance static

我有一个带有成员的类m_preferences(一个包含单词和特征之间关联的向量).

在这个类中,m_preferences它不是静态的,因此该类的任何实例都具有其特定的m_preferences.

class Base{

private:

    Preferences m_preferences;

public:
...

}
Run Code Online (Sandbox Code Playgroud)

然后我创建了一个派生类,它m_preferences变为静态,因为我希望这个类的每个新实例共享相同的首选数据,无论发生什么.

class Derived: public Base{

private:

    static Preferences m_preferences;

public:
...

}
Run Code Online (Sandbox Code Playgroud)

我收到了链接错误.

是否可以做我想做的事情(通过继承将非静态成员转换为静态成员)?

如果不是这种不可能性背后的哲学是什么?有计划吗?

谢谢,

此致

罗南

CB *_*ley 6

你不能停止的每一个实例Base-包括每一个实例Derived-从,因为这是由基类的定义有保证每个实例偏好成员变量.

您所做的是向该类添加一个新的静态Preferences成员Derived,这意味着除了Preferences与基类关联的每个实例成员之外,您还在Preferences所有Derived实例之间共享一个全局实例.

因为您对这两个成员使用了相同的名称,所以在Parent成员函数的上下文中,使用标识符m_preferences将引用全局共享实例,除非您将其限定为Base::m_preferences.

您的链接错误可能是因为您需要Derived::m_preferences在其中一个翻译单元中提供定义.

例如在some.cpp中,在任何函数体之外:

Preferences Derived::m_preferences;
Run Code Online (Sandbox Code Playgroud)