gpt4 book ai didi

c++ - 静态成员和继承

转载 作者:太空狗 更新时间:2023-10-29 19:40:06 26 4
gpt4 key购买 nike

我有一个包含成员 m_preferences 的类(一个包含单词和特征之间关联的 vector )。

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

class Base{

private:

Preferences m_preferences;

public:
...

}

然后我创建了一个派生类,其中 m_preferences 变为静态,因为我希望无论发生什么情况,此类的每个新实例都共享相同的偏好数据。

class Derived: public Base{

private:

static Preferences m_preferences;

public:
...

}

我遇到链接错误。

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

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

谢谢,

此致

罗南

最佳答案

您不能阻止 Base 的每个实例 - 包括 Derived 的每个实例 - 都有一个每个实例的 Preferences 成员变量,因为这是由定义保证的基类。

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

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

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

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

Preferences Derived::m_preferences;

关于c++ - 静态成员和继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/903363/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com