初始化类中的私有静态变量
Initializing private static variable in class
我在头文件中有一个类:
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
。如何更改常量参数?
因此,您可以将其设置为静态,并在构造函数中初始化为所需的某个值。默认情况下,静态变量初始化为零。
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 模板基类中的静态变量
- 类和静态变量
- 不同作用域中的静态变量和全局变量
- 静态变量声明和定义
- 是否可以依赖函数范围的静态变量来执行程序关闭期间调用的方法?
- 在类中继承静态变量?
- "local scope"中的 C++ 初始化静态变量
- 使用静态变量的递归调用的不同输出
- 复制文件流C++静态变量
- 跨模板化函数编译的静态变量
- C++编译器是否优化了顺序静态变量读取?
- C++,每个循环初始化一个新的静态变量
- (为什么)我们可以在初始化中将非静态类成员分配给静态变量吗?
- 这些语句是否等效(静态变量、常量变量和泛型)
- 程序如何知道静态变量是否需要初始化?
- 类外的静态变量实例化
- 无法解析静态变量
- 函数局部静态变量:从性能角度来看的优点/缺点
- 访问从 CPP 文件到其他头文件的静态变量