3

我在头文件中有一个类:

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

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

    public: 
    ....
    };

愚蠢的事情是在教练的“指南”中说,在类的私有成员中将 numEmployees 声明为 0 的静态整数值

问题是我不能更新numEmployees变量,因为它是const,例如当你公开声明构造函数时:..你不能增加numEmployees = numEmployees + 1

如果您不声明numEmployeesconst,则只需在static int numEmployees;Visual Studio 2010 中给出错误说只会const在类中声明。

知道如何申报numEmployees吗?谢谢!

4

4 回答 4

6

既然numEmployees要变了,那就不应该了const。非 const 静态变量必须在类声明之外进行初始化,例如在源文件中,如下所示:

int Employee::numEmployees = 0;

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

我会做gender一个枚举,而不是一个字符。

于 2012-05-20T08:33:11.520 回答
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;

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

于 2012-05-20T08:45:53.453 回答
1

在类之外初始化numEmployees

Employee::numEmployees = 0

并将其声明public为类中的成员

static int numEmployees;

您也可以在private不初始化的情况下声明它,因为静态成员默认分配为零。

于 2012-05-20T08:30:21.973 回答
1

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

因此,您可以将其设为静态并在构造函数中初始化为您想要的某个值。默认情况下,静态变量初始化为零。

于 2012-05-20T08:32:12.343 回答