您的位置:首页 > 其它

静态变量的初始化

2015-07-21 10:20 197 查看
 静态数据成员的使用方法和注意事项如下:

  1、静态数据成员在定义或说明时前面加关键字static。

  2、静态成员初始化与一般数据成员初始化不同。静态数据成员初始化的格式如下:

    <数据类型><类名>::<静态数据成员名>=<值>

  这表明:

  (1) 初始化在类体外进行,而前面不加static,以免与一般静态变量或对象相混淆

  (2) 初始化时不加该成员的访问权限控制符private,public等。

  (3) 初始化时使用作用域运算符来标明它所属类,因此,静态数据成员是类的成员,而不是对象的成员。

  3、静态数据成员是静态存储的,它是静态生存期,必须对它进行初始化。

  4、引用静态数据成员时,采用如下格式:

   <类名>::<静态成员名>

  如果静态数据成员的访问权限允许的话(即public的成员),可在程序中,按上述格式来引用静态数据成员。

静态变量为什么需要在类外定义?

1.
在类中,只是声明了静态变量,并没有定义。 2. 声明只是表明了变量的数据类型和属性,并不分配内存;定义则是需要分配内存的。 注意:如果在类里面这么写int a; 那么是既声明了变量,也定义了变量,两者合在一起了。 3.
静态成员是“类级别”的,也就是它和类的地位等同,而普通成员是“对象(实例)级别”的。类级别的成员,先于该类任何对象的存在而存在,它被该类所有的对象共享。 4. 现在,咱们假定要实例化该类的一个对象,那么会发生什么事情呢?静态成员肯定要出现在这个对象里面的,对吧?这时候才去定义那个静态成员吗?这显然是不合适的。因为,比如有另外一个线程也要创建该类的对象,那么也要按照这个方式去定义那个静态成员。这会产生两种可能的情况:1.
重复定义;2. 就算不产生重复定义的情况,也会产生竞争,从而造成死锁的问题,以至于对象无法创建。很显然,编译器不能这么干。那么很合理的解决办法,就是事先在类的外部把它定义好,然后再供所有的对象共享。 注意:类的静态常量成员可以类内初始化。

下面是我的一个小小的测验:







参考URL:http://zhidao.baidu.com/question/454847745407964925.html
http://bbs.csdn.net/topics/20125272
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息