我对static
/global
/global static
/extern
变量的用法有点困惑。
我希望在创建类实例时增加一个计数器变量。
如果有人能澄清每种药物的适当用法,我将不胜感激。
根据OO概念,您应该NEVER使用global static
变量。您可以在class
中为class
的实例计数定义一个static
变量。将其设为private
,这样除了构造函数之外,其他任何人都无法增加计数。提供public
函数来获取计数器。参见以下示例:
你的班级。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)global static
:根据给定创建的静态变量:static int numberOfPersons;
这种变量只能在一个文件中看到(不会与其他文件中同名的其他变量发生名称冲突)
1b)class static
:(上面的实例计数中已有一个实例)一个类可能有static
成员,这些成员仅对该类可见(仅通过Class::VarName
语法访问)(而不是如上所述的"仅文件")。它不会和其他类中同名的变量发生名称冲突。每个类(而不是每个实例)只有一个副本。
1c)global static
和class static
都是global
(因为它们可以全局访问,无论是否使用类限定符Class::
。
因此,1a。,1b。和1c。部分解释static
、global
和global static
- 全局变量的另一种形式,就是定义一个没有
static
的变量
语法:int numberOfPersons;
如果没有static
,则其他文件可以使用extern
关键字查看此变量。它将和其他文件中具有相同名称的变量发生名称冲突。因此,在全局范围内,您只能在所有源文件中定义它ONCE。
extern
:声明在其他地方定义的变量/函数它通常出现在头文件中。我们可以在其他文件中定义一些变量,并在使用该变量的另一个源文件中将该变量声明为extern
,如下所示
extern int numberOfPersons;
int addPersonCount()
{
numberOfPersons++;
}
希望这能有所帮助。