作用:
1.修饰普通变量,修改变量的存储区域和生命周期,使变量存储在静态区,在main函数运行前就分配了空间,如果有初始值就用初始值初始化它,如果没有初始值就用默认初始化值;
2.修饰普通函数,表明函数的作用范围,仅在定义该函数的文件内才能使用。在多人开发项目时,为了防止与他人命名函数重名,可以将函数声明为static;
3.修饰成员变量,修饰成员变量是所有的对象只保存一个变量,而且不需要生成对象就可以访问该成员,static类成员不像普通的类数据成员,static类数据成员独立于一切类对象存在。static类数据成员是与类关联的,但不与该类定义的对象有任何关系,就是static不会像普通类数据成员一样每一个类对象都有一份,全部类对象是共享一个static类成员的,例如A类对象修改了static成员为1,那么B对象对应的static类对象成员的值也会是1.;
4.修饰成员函数,修饰成员函数使得不需要生成对象就可以访问该函数,但是在static函数内不能访问非静态成员。
5.在使用static变量时,就和使用普通的全局变量一样,区别只是要在变量名前加上类范围符的前缀::。
6.static修饰的变量先于对象存在,所以static修饰的变量要在类外初始化。因为static是所有对象共享的,必须要比对象先存在。
好处:
用static修饰的成员变量在对象中是不占内存的,因为他不是跟对象一起在堆或者栈中生成,用static修饰的变量在静态存储区生成的,所以static修饰可以节省对象的内存空间。例如,创建多个object对象,而他们都有共有的一个变量。
#include<iostream>
using namespace std;
class object
{
public:
static int number;//声明static变量
int val;
static void test() //修饰成员函数
{
//cout << val << endl;报错,不能访问非静态成员
cout << number << endl;
printf("这是静态成员函数\n");
}
};
int object::number = 1;//类外初始化,不需要生成对象就可以访问该变量
int main()
{
cout << object::number << endl;
//int object::number = 1;报错,只能在类外初始化
//object::val = 2;报错,无对象不能访问val
object::test();//不需要生成对象就可以访问该成员函数
return 0;
}
网友评论