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

Initializing private static variable in class

本文关键字:静态 变量 初始化      更新时间:2023-10-16

我在头文件中有一个类:

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

如果你不声明numEmployees const,只要static int numEmployees; Visual Studio 2010给出错误说只有const将在类中声明。

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

由于numEmployees将要更改,因此不应const。非 const 静态变量必须在类声明之外初始化,例如在源文件中,如下所示:

int Employee::numEmployees = 0;

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

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

在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;

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

类外的numEmployees初始化为

Employee::numEmployees = 0

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

static int numEmployees;

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

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

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