参考博客:
C/C++中STATIC用法总结_baboon_chen的博客-CSDN博客_c++中static的作用和用法
C++中使用static:
两大特点:
1.修饰变量:
在程序运行的时候已经有初始值,分配好了内存空间,每次调用时不再重新赋值而是保留上次函数结束时遗留的值
2.修饰函数:
①修饰类的成员函数时,类的成员函数会有两部分,静态和非静态
我们可以通过类的对象访问两种函数,例如:A.a() , A.b(),其中a为静态,b为非静态
但是只能用A: : a来访问静态成员函数,并且该成员函数只需要声明一下即可,不需要返回static类型的值
tips:静态的成员函数中,只能使用静态参数,如果该成员变量非静态并且被调用,那么就会在类的对象初始化(成员变量赋值)之前生成该函数,就会 报错
例如:
1.类的静态成员
class A{
private:
static int val;
};
int A::val = 1;
在.cpp中必须给它初始化,使用的时候标注作用域,例: uint a = A::val ;
2.类的静态成员函数
class A{
private:
static int func(int x);
};
void A::func(int);
实现的时候也不需要static的修饰,因为static是声明性关键字,只需要在.h文件中标注static即可
类的静态函数是该类的范畴内的全局函数,不能访问类的私有成员,只能访问类的静态成员,不需要类的实例即可调用;
实际上,他就是增加了类的访问权限的全局函数;
3.只在cpp内有效的全局变量
static int val = 0;
这个变量的含义是该cpp内有效,但是其他的cpp文件不能访问这个变量;如果有两个cpp文件声明了同名的全局静态变量,那么他们实际上是独立的两个变量;
思考:
静态修饰的东西,函数和变量属于类,但是又和类的其他成员不一样,它在类初始化时就会自己先分配内存,但是在类实例化的时候才会给生成其它成员