首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

初学者:类的静态成员

2012-04-05 
菜鸟求救:类的静态成员小弟是C++的新手,请问各位大虾一个问题:类的静态数据成员和类的静态成员函数各有什

菜鸟求救:类的静态成员
小弟是C++的新手,请问各位大虾一个问题:

类的静态数据成员和类的静态成员函数各有什么作用,其主要目的是什么?
谢谢!

[解决办法]
让类具有更好的封装性,共享性
让外部的函数能直接调用它
[解决办法]
例如需要统计时就使用静态成员变量

各个函数都能使用改变他 方便 不用来回传参数了
[解决办法]
静态数据成员

  在类中,静态成员可以实现多个对象之间的数据共享,并且使用静态数据成员还不会破坏隐藏的原则,即保证了安全性。因此,静态成员是类的所有对象中共享的成员,而不是某个对象的成员。

  使用静态数据成员可以节省内存,因为它是所有对象所公有的,因此,对多个对象来说,静态数据成员只存储一处,供所有对象共用。静态数据成员的值对每个对象都是一样,但它的值是可以更新的。只要对静态数据成员的值更新一次,保证所有对象存取更新后的相同的值,这样可以提高时间效率。

  静态数据成员的使用方法和注意事项如下:

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

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

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

  这表明:

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

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

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

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

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

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

  如果静态数据成员的访问权限允许的话(即public的成员),可在程序中,按上述格式来引用静态数据成员。
[解决办法]
静态成员函数的特性类似于静态成员的使用,同样与对象无关,调用方法为类名称加域区分符加成员函数名称,静态成员函数由于与对象无关系,所以在其中是不能对类的普通成员进行直接操作的。

参看资料:
http://tech.163.com/05/0405/14/1GJ54LR400091589.html
[解决办法]
类的静态数据成员 ——所有的对象都没有单独的副本,只有类有一个唯一的副本。用在如果变量是类的一部分,但却不是该类的各个对象的一部分时。

类的静态成员函数——类似的含义。需要访问类成员,但却并不需要针对特定的对象去调用的函数。
[解决办法]
定义或是书本就是按照上面几位兄台说的。

1、真正应用的时候,经常会遇到不得不用全局变量做某些控制的情况。但是如果用了全局变量,那么这个类的封装性就被破坏了(因为这个类不能单独工作,还需要借助别的东西)。这个时候静态成员就派上了用场,因为我们可以把它当全局变量用,而且不会破坏封装性。
2、真正应用的时候,经常会遇到需要某个函数指针作为回调函数参数的情况。回调函数大都需要一个全局函数的指针,这主要是因为普通成员函数有个默认的this参数,是不能作为回调函数的。但是静态成员函数不同,他没有this参数,可以作为回调函数。这样就又避免了使用全局函数带来的封装性被破坏的问题。

热点排行