C ++静态成员,这里有点困惑

时间:2010-12-31 03:57:13

标签: c++

    //static member in classes
#include <iostream>
using namespace std;

class CDummy {
public:
    static int n;
    CDummy() {n++;};
    ~CDummy(){n--;};
};

int CDummy::n =0;

int main(){
    CDummy a;
    CDummy b[5];
    CDummy *c = new CDummy;
    cout << a.n << endl;
    delete c;
    cout << CDummy::n << endl;
    return 0;
}

结果是7,6。 有人可以帮我解释一下吗? 我不明白这个“CDummy b [5];”。人们从不在C中使用这样的语法,对吧?这是什么? 谢谢!

5 个答案:

答案 0 :(得分:2)

CDummy b[5];

这声明了一个包含五个CDummy个对象的数组。它最终调用CDummy默认构造函数五次(对于数组中的每个对象一次)。

您创建了七个CDummy个对象:a,数组b中的五个,以及c指向的对象。 n的值为7。然后你销毁一个CDummy对象(c指向的对象),n的值为6。当CDummy函数返回时,剩余的六个main对象在超出范围时会被销毁。

答案 1 :(得分:1)

CDummy b[5]是一个包含五个CDummy个对象的数组。 CDummy a只是CDummy的单个实例,CDummy c也是如此。

每次创建CDummy时,都会调用构造函数。

让我们补充一下:5 + 1 + 1 = 7。这就是n最初为7的原因。删除c后,n--已执行,n成为6

答案 2 :(得分:0)

static在这种情况下意味着变量n对于所有CDummy实例都是相同的,在你的情况下a,b和c(在使用new分配对象之后)都共享相同的n。这就是你看到这个价值的原因。

CDummy b [5] - &gt;这声明了一个CDummy数组,在这种情况下是5个CDummys。

答案 3 :(得分:0)

CDummy b[5]只是一个包含5个CDummy对象的数组。

静态成员意味着无论该类的实例有多少,该成员只有一个实例。

每当初始化新实例时,类只是从构造函数中递增n,并且每当实例被销毁时,都会从析构函数中递减n。它基本上跟踪此类当前活动的实例数。

答案 4 :(得分:0)

n是类CDummy中的静态成员变量。 n与类的所有对象相关联,而不是与类的每个对象实例相关联。 随着每个对象实例的创建和递减,n会递增,因为每个对象实例都会被销毁。 在main函数中,我们创建对象a(n = 1),然后是大小为5(n = 6)的对象数组b,后跟指向对象c(n = 7)的指针。所以第一个cout语句输出7.当c指向的对象被销毁时,n减少到6。 所以第二个cout语句输出6。 有关类中静态成员的详细信息,请参阅此link