我有点困惑于静态变量 / 全局变量 / 全局静态变量 / 外部变量的使用。
我想让一个计数器变量在创建任何类实例时都增加。
如果有人能发表关于每个变量的适当用法的澄清,将不胜感激。
我想让一个计数器变量在创建任何类实例时都增加。
如果有人能发表关于每个变量的适当用法的澄清,将不胜感激。
全局静态变量
。相反,你可以在你的类
中定义一个静态
变量来计算你的类
的实例数量。将其设为private
,这样除了你的构造函数以外,没有任何人能够增加计数器。提供一个public
函数来获取计数器。请参考下面的示例:
yourclass.h:
class YourClass {
private:
static int instanceCount_;
public:
YourClass() {++YourClass::instanceCount_;} // constructor
~YourClass() {--YourClass::instanceCount_;} // destructor
static int instanceCount() {return instanceCount_;}
};
yourclass.cpp:
int YourClass::instanceCount_ = 0;
static
/ global
/ global static
/ extern
的概念:
static
:1a) 全局静态变量
:
创建一个静态变量如下:static int numberOfPersons;
这种类型的变量只能在当前文件中被访问到(不会与其他文件中同名变量发生命名冲突)。
1b) 类静态变量
:(实例计数器中已经有了相应的示例)
一个类可以拥有静态
成员,这些成员只能被该类访问(只能使用Class::VarName
语法来访问),而不是像上面所说的‘只在当前文件中’。它不会与其他类中同名变量发生命名冲突,每一个类只有一个该变量的副本(而不是每个实例都有一份)。
1c) 全局静态变量
和类静态变量
都是全局
的(因为它们可以通过类限定符Class::
或者不带限定符的方式进行全局访问)。
因此,1a、1b和1c部分解释了static
、global
和global static
的概念。
static
int numberOfPersons;
没有static
,这个变量可以被其他文件看到,使用extern
关键字。如果在其他文件中有相同名字的变量,那么它们会发生命名冲突。因此,在所有源文件中,您只能定义一个全局变量一次。
extern
: 声明一个别处已定义的变量/函数。通常在头文件中使用。我们可以在另一个使用这个变量的源文件中将这个变量声明为extern
,如下所示:extern int numberOfPersons;
int addPersonCount()
{
numberOfPersons++;
}
inline
是什么意思? - yael aviv
static
计数器变量,在你的构造函数中递增它,在你的析构函数中递减它。 - Paul R