在类中初始化私有静态变量

时间:2012-05-20 08:28:33

标签: c++ class

我在头文件中有一个类:

class Employee
    {
        //Private data members
    private:
        string firstName;
        string lastName;
        char gender;

        //number of employees
        const static int numEmployees = 0;

    public: 
    ....
    };

愚蠢的事情是在教师的“GUIDELINE”中说,在类的私有成员中声明numEmployees为静态整数值

问题是我无法更新numEmployees变量,因为它是const,例如当您在公共场所声明构造函数时:..您无法增加numEmployees = numEmployees + 1

如果您未将numEmployees声明为const,请执行static int numEmployees; visual studio 2010给出错误,表示只会在课堂上声明const

知道如何声明numEmployees吗?谢谢!

4 个答案:

答案 0 :(得分:6)

由于numEmployees将会发生变化,因此不应该是const。非常量静态变量必须在类声明之外进行初始化,例如在源文件中,如下所示:

int Employee::numEmployees = 0;

话虽如此,numEmployees成为Employee类的成员可能不是最好的主意。

我会让gender成为一个枚举,而不是一个字符。

答案 1 :(得分:2)

在C ++中,静态变量需要在类声明中声明,但也在实现模块中定义。

// --- .h interface file
class MyClass
{
    public:
        static int my_static_variable;
    ...
};

// --- .cpp implementation file
#include "myclass.h"
int MyClass::my_static_variable = 0;

这种限制没有真正的技术论据,但它是如何定义语言的。

如果由于某种原因你真的需要绕过它,你可以使用功能级静态:

class MyClass
{
    public:
        // Note: returning a reference to int!
        static int& my_static_variable()
        {
            static int n = 0;
            return n;
        }
};

但是,要访问变量,在这种情况下,您需要正式调用方法:

MyClass::my_static_variable() = 0;
MyClass::my_static_variable() ++;
MyClass::my_static_variable() *= 2;

我说“正式”因为对于这样一个简单的内联声明函数,一个体面的编译器生成的机器代码将与处理一个变量所需的代码相同。

答案 2 :(得分:1)

在课堂外初始化numEmployees

Employee::numEmployees = 0

并在类中声明为public成员

static int numEmployees;

您也可以在没有初始化的情况下声明它private,因为默认情况下静态成员被指定为零。

答案 3 :(得分:1)

您已将其声明为const。如何更改const参数?

因此,您可以将其作为静态并初始化为构造函数中所需的某些值。默认情况下,静态变量初始化为零。