静态类数据成员和构造函数

bob*_*205 3 c++ static constructor member

如何使用所有静态方法访问类中的静态成员?

我希望有一组相关的函数,但在调用任何这些函数之前,还要初始化一些重要的数据成员.我认为只有静态成员的课程才有可能.VS2008中的编译器不喜欢我试图访问"a".

当然我错过了一些小但仍然很困惑的东西.:P(即使没有"a"的无效访问,从main调用testMethod()时也不会调用构造函数.

class IPAddressResolver
{
private:

public:
    static int a;
    IPAddressResolver();
    static void TestMethod();
};


IPAddressResolver::IPAddressResolver()
{
    IPAddressResolver::a = 0;
    cout << "Creating IPAddressResolver" << endl;
}

void IPAddressResolver::TestMethod()
{
    cout << "testMethod" << endl;
}
Run Code Online (Sandbox Code Playgroud)

Pét*_*rök 11

您需要在函数之外定义静态数据成员,例如

class IPAddressResolver
{
private:
    static int a;
    IPAddressResolver();
public:
    static void TestMethod();
};

int IPAddressResolver::a = 0;

void IPAddressResolver::TestMethod()
{
    cout << "testMethod" << endl;
}
Run Code Online (Sandbox Code Playgroud)

您的构造函数未被调用,因为您没有创建该类的新实例.对于静态实用程序类,您不需要实例,因此可以完全省略构造函数.或者,您可能希望声明它private以明确表示不应该实例化该类(参见上文).

笔记:

  • 不推荐使用public的类领域的,所以我把aprivate,
  • 静态实用程序类通常是无状态的,因此如果您需要在类中包含字段,这可能表明该类最好是Singleton.