何时使用静态变量C ++

时间:2014-09-16 10:54:11

标签: c++ static global-variables extern

我对static / global / global static / extern变量的使用感到有些困惑。

我想在一个类实例的任何创建中增加一个计数器变量。

如果有人可以为每个人发布适当用法的说明,我们将非常感激。

1 个答案:

答案 0 :(得分:4)

根据OO概念,您不应该使用全局静态变量。 您可以在类中为类的实例计数定义静态变量。 将其设为私有,以便除了构造函数之外没有其他人可以增加计数。 提供公共功能来获得计数器。见下面的例子:

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的概念 静态的 1a)全局静态: 一个静态变量形式如下:

static int numberOfPersons;

这种变量只能在文件中看到(不会与其他文件中的其他相同变量名称发生名称冲突)

1a)class static :(已经在上面的实例计数中有一个例子) 一个类可能有静态成员,这些成员只对该类可见(仅由Class :: Var形式访问)(而不仅仅是'文件如上所述)。它不会在其他类中使用相同的变量名进行名称冲突。它每个类只有一个副本(不是每个实例)。

1b)全局静态和类静态都是全局的。 (因为它们可以通过类限定符" Class ::"或者不是全局访问。

所以,1a。和1b。解释静态,全局和全局静态,呃,部分,见下面的

  1. 另一种形式的全局变量,只是定义一个没有'静态'的变量,如下所示:

    int numberOfPersons;

  2. 没有'静态',这个变量可以通过其他文件看到,使用' extern'关键词。并且它将与其他文件中的相同变量进行名称冲突。因此,在全局范围内,您只能在所有源文件中定义它。

    1. extern:声明一个在其他地方定义的变量/函数。它通常出现在头文件中。如3.中所述,您可以在其他文件中定义一些变量,并在另一个使用它的源文件中将此变量声明为extern,如下所示。 extern int numberOfPersons;

      int addPersonCount() {      numberOfPersons ++; }

    2. 希望这有帮助。