解法一:
1.static变量在类外赋值,且前面要加类型。
3 类的静态成员变量在使用前必须先初始化。
2.这题为什么要先reset一下,在外面不是赋值了吗?
class tmpClass{
public:
tmpClass()
{
++N;
sum+=N;
}
static int getsum()
{
return sum;
}
static void reset()
{
N=0;
sum=0;
}
private:
static int sum;
static int N;
};
//类的静态成员变量在使用前必须先初始化。
int tmpClass::sum=0;//这里必须要有int
int tmpClass::N=0;
class Solution {
public:
int Sum_Solution(int n) {
tmpClass::reset();//这里必须要重新置0,可能没有初始化成功??
tmpClass* tmparr=new tmpClass[n];
delete []tmparr;
return tmpClass::getsum();
}
};
结论1:不能通过类名来调用类的非静态成员函数
结论2:类的对象可以使用静态成员函数和非静态成员函数。
因为静态成员函数属于整个类,在类实例化对象之前就已经分配空间了,而类的非静态成员必须在类实例化对象后才有内存空间,所以这个调用就出错了,就好比没有声明一个变量却提前使用它一样。
结论3:静态成员函数中不能引用非静态成员。
结论4:类的非静态成员函数可以调用用静态成员函数,但反之不能。
类的静态成员变量在使用前必须先初始化。
结论5:类的静态成员变量必须先初始化再使用。