c++ - 静态成员声明 c++11

标签 c++ c++11 inheritance static-members

我创建了一个带有静态字段的基本 IBasic 界面

class IBasic
{
public:
    IBasic();
    virtual ~IBasic();

    static std::vector< std::vector<char> > Field;
};

Inherit类继承自:

class Inherit : public IBasic
{
public:
    Inherit(int);
    ~Inherit();
    void Foo();
};

Inherit 类在构造函数/或成员函数中对 Field 静态成员进行一些操作。 为了创建 Inherit 类的实例,我们需要在 main.cpp 中在 main 函数之前显式声明一个静态字段:

#include "Basic.h"
#include "Inherit.h"

std::vector< std::vector<char> > IBasic::Field;

int main()
{
    Inherit(10);

    return 0;
}

问题是:

  1. 静态方法实际存在于哪个 namespace (全局?)?因为我知道静态字段/函数实际上不是类成员。
  2. 是否有另一种方法来声明这个静态方法,例如,在 类文件,主函数内部,还是通过创建未命名的命名空间?它只有一个正确的变体吗?
  3. 怎样才是对的?首先应该考虑什么?

最佳答案

类的静态成员是其类的成员(这是重言式)及其类命名空间(类是命名空间)。它不是任何其他 namespace 的成员。

类的非 const 静态数据成员必须在程序中定义一次,在任何类之外,在定义其类的同一命名空间中(在您的情况下为全局命名空间)。头文件不适合放置此类声明。它通常放在与头文件一起的实现 .cpp 文件中。

话虽如此,接口(interface)不应该有任何静态数据成员,更不用说公共(public)数据成员了。这很可能是一个严重的设计错误。

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

相关文章:

c++ - 递归段错误

c++ - 如何附加 wstring 并将其写入文件

c++ - Makefile.am 的 EXTRA_DIST 重复目录名

c++ - 如果类使用虚拟继承,为什么对象大小会增加?

c++ - 函数内的动态内存删除

c++ - 将可变参数模板模板参数专用于最小参数数量 : legal or not?

c++ - Boost strand post 在访问/插入值时导致段错误

Python:回调问题

javascript - JS嵌套继承

c++ - 在 C++11 中双重检查锁定?