static对于C++的数据共享有着非常重要的作用。
在类中申明的static数据是从属于类而不是对象,也就是说所有的对象都拥有共同该数据信息:
对于非静态数据成员,每个类对象都有自己的拷贝。而静态数据成员被当作是类的成员。无论这个类的对象被定义了多少个,静态数据成员在程序中也只有一份拷 贝,由该类型的所有对象共享访问。也就是说,静态数据成员是该类的所有对象所共有的。对该类的多个对象来说,静态数据成员只分配一次内存,供所有对象共 用。所以,静态数据成员的值对每个对象都是一样的,
注意:静态成员的初始化在类的外面,因为这个静态成员不是属于对象,在对象没有实例化之前是不能通过对象去访问的,但是在外面可以直接通过类名就访问到
因为静态成员不需要类实例化就已经被分配了内存空间。
静态成员函数:
被static修饰过的静态成员函数与静态数据相似,不属于对象,而是属于类,要注意得是静态成员函数只能访问静态变量,非静态的访问不到。一般静态函数用来给静态变量初始化。
这里已经可以很清晰的了解静态作用域的问题。
1.出现在类体外的函数定义不能指定关键字static;
2.静态成员之间可以相互访问,包括静态成员函数访问静态数据成员和访问静态成员函数;
3.非静态成员函数可以任意地访问静态成员函数和静态数据成员;
4.静态成员函数不能访问非静态成员函数和非静态数据成员;
