C++ ——static关键字
1、static修饰局部变量---->静态局部变量
特点:
(1)第一次调用时创建,然后第一次调用结束时没有被回收,以后每次调用,都延用上一次调用结束时的值,直到程序结束时,才被回收
(2)由这个类创建的所有对象共享同一个静态局部变量
#include <iostream>using namespace std;class Test{private:int num;public:Test(int num):num(num){}void add(){static int number=90; //静态局部变量number++;cout<<"number="<<number<<endl;}};int main(){Test t(0);t.add(); //91t.add(); //92t.add(); //93//由这个类创建的所有对象共享同一个静态局部变量
Test t2(7);t2.add(); //94return 0;}
2、static修饰成员变量---->静态成员变量
特点:
(1)必须类内声明,类外初始化
(2)所有对象共享,生命周期是程序运行时创建,程序结束时销毁
(3)公共权限下,除了可以使用对象访问静态成员变量,也可以使用类名::静态成员变量名进行访问,推荐使用类名访问
#include <iostream>using namespace std;class Test{private:int num; //普通成员变量public://类内声明
static int num2; //静态成员变量public:Test(int num):num(num){}};//类外初始化
int Test::num2=90;
int main(){//静态成员变量的访问//两种方式:通过对象、通过类名(推荐使用)Test t3(9);cout<<t3.num2<<endl; //对象访问
cout<<Test::num2<<endl; //类名访问
return 0;}
3、static修饰成员函数---->静态成员函数(方法)
特点:
(1)即可以通过类名调用,也可以通过对象调用
(2)静态成员函数只可以访问静态成员变量,因为其内部没有this指针,所以不可以访问非静态成员变量
(3)静态成员函数声明和定义分离时,static需添加在声明处(类内)
#include <iostream>using namespace std;class Test{private:int num; //普通成员变量public:static int num2; //静态成员变量public:Test(int num):num(num){}//静态成员函数
static void fn1(){cout<<"静态成员函数"<<endl;//cout<<this<<endl; //报错,静态成员函数没有this指针,所以不可以访问非静态成员变量cout<<num2<<endl; //只可以访问静态成员变量}//类内声明static void fn2();};//类外定义void Test::fn2(){cout<<"静态成员函数"<<endl;}int main(){Test t2(7);//静态成员函数的调用:通过对象、通过类名(推荐使用)Test::fn1(); //类名调用
t2.fn1(); //对象调用
return 0;}