静态全局变量
静态全局变量的定义:例如: static int value;
静态全局变量的初试化:未初始化的静态全局变量会自动初始化为0;也可以在定义的时候自己手动初试化。
静态全局变量的作用域:仅在当前文件有效,存储在静态存储区,在整个程序运行期间一直都存在。
#include <iostream>
using namespace std;
static int value;
void fun1() {
value++;
cout << "执行第一个函数后的值:" << value << endl;
}
void fun2() {
value = value + 10;
cout << "执行第二个函数后的值:" << value << endl;
}
int main()
{ //未初始化的静态全局变量会自动初始化为0
cout << "没有初始化的静态成员变量的值:" << value << endl;
fun1();
fun2();
//静态全局变量仅在当前文件内有效
return 0;
}
输出:
静态局部变量
静态局部变量的定义:例如: static int value;
静态局部变量的初试化:未初始化的静态局部变量会自动初始化为0;也可以在定义的时候自己手动初试化。
内存位置:静态存储区域。
静态局部变量的作用域:作用域为局部作用域,当定义他的函数或者语句块结束的时候她的作用域结束。但是当局部静态变量离开作用域后并没有被销毁,任然存储在静态内存当中,只是我们不能对其进行访问,直到函数再次被调用,并且值保持不变。
代码:
#include <iostream>
using namespace std;
void fun() {
static int value;//没有初始化的静态局部变量的值为0
value++;
cout << "调用" << value << "次value的值;" << value << endl;
}
int main()
{
int value = 250;
for (int i = 0;i < 10;i++)
{
fun();
}
cout << "主函数value的值:" << value << endl;
return 0;
}
输出:
静态函数
静态函数定义声明:默认的都是extern :例如 static int show (int);
静态函数的作用域:只作用在本cpp文件,不能被其他文件所用,不会同其他cpp的同名函数起冲突。
静态成员变量
静态成员变量定义:例如:static int value;。
静态成员变量的初试化:静态成员变量不能通过初试化初始化列表初试化,必须初始化且只能在类外部进行初试化(不能在函数内部包括主函数)例如:int Base::value = 10;
静态成员变量的调用:①通过类名来调用 例如:Base::value;②通过对象来调用 例如:Base b;b.value;
静态成员函数
静态成员函数的定义:例如 static void show(){};
静态成语=员函数的调用:①静态成员函数只能调用静态成员,不能调用非静态的成员。②静态成员函数可以通过类名来调用也可以通过对象来调用。
代码:
#include <iostream>
using namespace std;
class Base {
public:
static void show() //静态成员函数的定义
{
cout << "静态成员函数调用静态成员变量" << value << endl;//静态成员函数只能调用静态成员
}
static int value;//静态成员变量的定义
};
int Base::value = 10;//静态成员变量在类外部初始化
int main()
{
cout << "通过类名调用静态成员变量" << Base::value << endl;//通过类名调用静态成员变量
Base::show();//通过类名调用静态成员函数
Base B;
cout << "通过对象名调用静态成员变量" << Base::value << endl;//通过对象名调用静态成员变量
B.show();//通过对象调用静态成员函数
}
输出:
静态成员函数&&静态成员变量归纳总结
①静态成员是属于这类的,所有的对象共同所有。
②静态成员没有隐含的this指针。(重点!!!!!)
③如果静态成员是私有的则不能在类外直接访问,私有的静态成员变量可以在类外初始化,因为静态成员变量必须初始化。
所有的静态变量函数都是存放在静态区。
编译器:vs 2017