static 有什么作用?
面试的时候,很容易问到的基础性问题,也是最容易被大家忽略的问题。
一、static 修饰 类的成员变量
在class 里面出现一个变量, 比如 :
class Example
{
public:
static int a;
...
};
一个成员变量加了static, 那么这个static成员变量是属于整个类的,而不是某个对象。存放的位置呢,也跟普通变量有了区别:
普通成员变量,存放在stack里面,每个实例化的对象的成员变量,单独保存各自的数据。
static成员变量只会存储一份放在data段的rw段
static 成员变量的声明:
static 数据类型 变量名称; // 在类的内部
static成员变量的初始化:
数据类型 类名::静态数据成员 = 初值; // static成员变量一定要初始化! 初始化在类的外部
二、static 修饰成员函数
静态成员函数,比如:
class Example
{
public:
static int a;
public:
static int changeAValue(int value);
};
static 修饰类的成员函数的格式:
static 成员函数名();
static成员函数的意义不在于信息共享,而在于管理static成员变量,完成对static成员变量的封装;
static 成员函数只能访问静态数据成员。原因:非静态成员函数,在调用时this指针(this指针指向当前实例本身)被当做参数传入,而静态成员函数属于类,不属于对象,
没有this指针。
原文:http://www.cnblogs.com/JasonLincoln/p/5215338.html