静态成员函数和静态成员变量
以静态成员函数为例总结,静态成员变量异曲同工。
类的静态成员函数是同一类的所有对象共享的,不需要用this指针
可以通过类名和对象名访问静态成员函数
声明时要在普通成员函数加上static,在定义时不需要
注意 在初始化静态成员变量时要在类外!!
例如:(该例子会在后面给出题目)
class Group {
private:
int num;
static int blackList[N];
static int size;
public:
Group();
Group(int num, bool bSign);
static void addToList(int num);
static void removeFromList(int num);//静态成员函数的声明(要说明static)
static void displayList();
};
Group aa;
void Group::removeFromList(int num) {//静态成员函数的定义(无需说明static)
int ii;
for ( ii = 0; ii < N; ii++) {
if (blackList[ii] == num) {
break;
}
}
for (ii = ii; ii + 1 < N; ii++) {
blackList[ii] = blackList[ii + 1];
}
blackList[ii] = 0;
size--;
}
可以如此引用
aa.removeFromList(num);
//或者
Group::removeFromList(num);
Group::size=0;//初始化静态成员变量
静态成员函数和普通成员函数的区别
静态成员函数 | 普通成员函数 | |
---|---|---|
隐含this指针 | no | yes |
能够访问普通成员函数(变量) | no | yes |
能够访问静态成员函数(变量) | yes | yes |
能够通过类名直接调用 | yes | no |
能够通过对象名调用 | yes | yes |
例题:oop第四次练习6-4
写得更好更详细的一篇博客传送门
如何动态创建对象数组
1、使用new进行创建,但在最后要记得使用delete释放
简单解释下:当new创建只是一个对象时,使用“delete 对象名”来释放
而当new创建一个数组(多个对象),使用“delete []对象名”
原因是delete只能释放一个对象,而“delete []”能释放数组内的所有对象
2、要重载多个构造函数,首先要有无参类型的构造函数,再根据需要构造有参类型的构造函数
3、在通过new+无参类型构造函数 构造了对象数组后,接下来可以用循环的方法输入对象数组中的对象元素(7-1);也可以调用有参类型的构造函数使用输入的数据进行处理(7-5)
例题:oop第四次练习7-1以及oop第四次练习7-5