对类的成员变量加上 static
如:
class MyClass
{
private:
double m;
static int k;
public:
MyClass();
~MyClass();
};
//初始化
int MyClass::k = 0;
int main()
{
}
void kkk()
{
int MyClass::k = 0;
}
对成员变量 k 加上 static 关键字,即:
将其声明为静态存储类,其特点是 无论创建了多少对象,程序都只创建一个静态类变量k的副本,也就是说,该类的所有对象共享一个静态成员,就像家中的电话可供全家庭成员共享一样。
注意:
(1)不能在类声明中初始化静态成员变量,这还少因为声明描述了如何分配内存,但并不分配内存。
(2)对于静态类成员的初始化必须在类声明以外进行,也就是使用时。
(3)静态类成员时候单独存储的,而不是对象的组成部分。
(4)静态类成员初始化的位置如上,不能放在任何类函数中,常规函数和全局空间可以定义
new 和 delete 处理由于使用动态内存而引起的问题
在构造函数中使用了 new 来分配内存时,必须在相应的析构函数中使用 delete 来释放内存。如果使用了new [] 来分配,也应该使用 delete [] 来释放。
说明:虽然一般而言,删除对象可以释放对象本身占用的内存,但并不能自动释放属于对象成员的指针所指向的内存。因此,必须使用析构函数,在析构函数中使用 delete 语句可确保对象过期时,由构造函数使用 new 分配的内存被释放。
示例:
#include <iostream>
using namespace std;
class Box
{
public:
Box() {
cout << "调用构造函数!" <<endl;
}
~Box() {
cout << "调用析构函数!" <<endl;
}
};
int main( )
{
Box* myBoxArray = new Box[4];
delete [] myBoxArray; // 删除数组
return 0;
}
如果要为一个包含四个 Box 对象的数组分配内存,构造函数将被调用 4 次,同样地,当删除这些对象时,析构函数也将被调用相同的次数(4次)。