class test {
public:
static int n;
test () { n++; };
~test () { n--; };
};
int test::n=0; //<----what is this step called? how can a class be declared as an integer?
int main () {
test a;
test b[5]; // I'm not sure what is going on here..is it an array?
test * c = new test;
cout << a.n << endl;
delete c;
cout << test::n << endl;
}
其次,输出为7,6,我不明白它是如何获得7的?
来自语句 -
int test::n=0;
'::
'称为范围分辨率运算符。此操作员在这里用于初始化静态字段n,而不是类
静态数据成员在类中声明。它们是在班级外定义的。
因此,在类定义中
class test {
public:
static int n;
test () { n++; };
~test () { n--; };
};
记录
static int n;
仅声明n。您需要定义它是为其分配内存。这个
int test::n=0;
是其定义。test::n
是变量的合格名称,表示N属于类测试。
根据类的定义,当构建类的对象时,此静态变量增加了
test () { n++; };
,当对象被破坏时,此静态变量降低
~test () { n--; };
实际上,此静态变量在计算类的活物体中起着作用。
因此,在主要您定义了类名称a
的对象test a;
每次定义对象时,都会调用类的构造函数。因此,n增加了,等于1。定义5个对象的数组
test b[5];
n等于6。
动态分配了一个对象
test * c = new test;
n等于7。
明确删除
delete c;
n再次等于6