关键字Static的作用

来源:互联网 发布:马塔潘角海战知乎 编辑:程序博客网 时间:2024/06/05 11:18

1、修饰变量

局部静态变量和全局静态变量,都存在内存的静态区

局部静态变量,在函数体内定义,只能在函数内部使用,同一个文件中的其他函数不能用。即使函数运行结束,这个静态变量的值也不会被销毁,函数下次使用时仍能用到这个值。

全局静态变量,在函数外部定义,作用域:从定义处开始,到所在文件结尾处结束,其他文件即使用extern声明也无法使用。

#include "stdafx.h"#include "iostream"using namespace std;static int j;void fun1(void);void fun2(void);void main(void){int k = 0;for (k = 0; k < 10; k++){fun1();fun2();}}void fun1(void){static int i = 0;i++;cout <<"fun1 " << i << endl;}void fun2(void){j = 0;j++;cout <<"fun2 " << j << endl;}
静态全局变量在定义时需要赋初值。

静态局部变量定义时赋初值后,再次调用所在函数,不会运行定义语句。

运行结果如下:

2、修饰函数

函数前加static使函数成为静态函数,静态函数的作用域仅局限于本文件,所以静态函数又称为内部函数。好处是:不同的人编写不同的函数时,不用担心自己所定义的函数是否会与其他文件中的函数同名。

3、C++类的静态成员

一般情况下,类的数据成员在每个对象中都有一个备份,因此,不同对象可以有不同的属性值,称为实例属性;有些情况下,某个数据成员的值对每个对象都是相同的,它对所有对象只有唯一的一个备份,称为类属性。通过静态成员实现类属性。

只需在声明该静态数据成员时以static开头。


公有静态数据成员可以像一般数据成员那样,直接通过对象或在成员函数中访问,也可以通过类名加作用域限定符来访问。

私有和保护静态数据成员,只能在成员函数中访问。

静态数据成员不属于哪一个对象,因此不能在构造函数或其他成员函数中进行初始化,初始化必须在类体外进行。

如:int Person :: m_nCount = 0 ;


有时需要在声明对象之前访问私有静态数据成员,必须定义一个访问静态数据成员的静态成员函数。

定义静态成员函数必须以static开头。静态成员函数与一个类相关联。

静态成员函数可以通过对象、其他成员函数和类名加运算符::调用。

静态成员函数只能访问类的静态成员(成员变量和成员函数),或者将对象作为静态成员函数的参数,然后通过对象访问非静态成员。


静态成员函数没有this指针,因为静态成员函数属于整个类,只有一个运行实例,不需要通过对象,通过类就可以调用。

0 0
原创粉丝点击