类的静态成员函数带来了什么好处,应该在什么时候使用?

转载 2011年10月13日 18:15:39

函数的行为对所有派生类都一致时,可以声明为静态。

静态成员函数的作用基本上相当于一个带有命名空间的全局函数。 

如一个数学类定义了一些函数 都可以声明伪静态的 Math.sin(x)等

好处很多,但所有的好处都是基于:它跟类的实例无关,只跟类有关,不需要this指针。
至于可重入问题,非静态成员函数也有啊。为什么单单问静态函数的可重入问题。
比如:
(1)可以实现某些特殊的设计模式:如Singleton;

(2)由于没有this指针,可以把某些系统API的回调函数以静态函数的形式封装到类的内部。因为系统API的回调函数通常都是那种非成员函数(孤立函 数),没有this指针的。比如你可以在类的内部写一个线程函数供CreateThread创建线程用,如果没有静态函数,那么这种回调函数就必须定义成 全局函数(非静态成员函数指针无法转换成全局函数指针),从而影响了OO的“封装性”。

(3)可以封装某些算法,比如数学函数,如ln,sin,tan等等,这些函数本就没必要属于任何一个对象,所以从类上调用感觉更好,比如定义一个数学函数类Math,调用Math::sin(3.14);如果非要用非静态函数,那就必须:
Math   math;
math.sin(3.14);
行是行,只是不爽:就为了一个根本无状态存储可言的数学函数还要引入一次对象的构造和一次对象的析构,当然不爽。而且既然有了对象,说不得你还得小心翼翼的定义拷贝构造函数、拷贝赋值运算符等等,对于一些纯算法的东西显然是不合适的。

(4)总之,从OOA/OOD的角度考虑,一切不需要实例化就可以有确定行为方式的函数都应该设计成静态的。
以上只是一些基本的考虑,并不是绝对的。绝对东西的只有一点:“静态函数不需要实例化就可以被调用,不会也不可以调用或操纵非静态成员”。记住这一点,那么实际编程中何时需要用,何时适合用,自然就更容易作出决定了。

使用静态函数的好处

这一次彻底的想弄清静态的概念~所以收集了以下资料加上自己的理解与大家分享~作为转载 静态成员函数与普通函数的区别: 1.静态成员函数实际上是一个全局函数,不依赖一个类的对象,而属于类不创建对象...
  • tianzeyu1992
  • tianzeyu1992
  • 2015-10-23 16:00:25
  • 2173

web前端给你带来什么

在互联网时代,前端开发人员决定着内容展现形式和信息的提供,是不可或缺的一部分。前端开发具有很明显的时代特征,在很大程度上决定着大众的信息摄入,以及用户读取信息的有效方式。我们可以看到,前端开发其实是一...
  • qq_34963384
  • qq_34963384
  • 2016-05-12 16:16:39
  • 92

静态成员函数和普通成员函数的区别

成员函数:无论静态函数还是非静态函数,都是属于类的(这一点与数据成员的静态非静态不同),对象并不拥有函数的拷贝.两者的区别在于:非静态的函数由类对象(加.或指针加->;)调用,这时将向函数传递this...
  • liujianfei526
  • liujianfei526
  • 2016-01-22 16:32:43
  • 6471

工作到底都能给你带来哪些好处?

在离开一家公司之前,你的心态是充满感恩和不舍,还是愤恨和怨念?无论你留还是走,给自己列一个list,原来它还有这么多值得感恩的地方。 1每月工资,供你生活 无论你现在实习还是在做全职工...
  • u010794281
  • u010794281
  • 2015-09-05 18:23:47
  • 1489

c++-静态成员函数和非静态成员函数的区别

1.virtual与静态函数 C++中,静态成员函数不能被声明为virtual函数。 例如,下面的程序会编译失败。#include class Test { public: ...
  • qq_30968657
  • qq_30968657
  • 2017-04-05 10:28:07
  • 1585

什么时候使用回调函数和使用回调的好处

什么时候使用回调函数? 假设有A、B两个类。 (1)A类有多种形态,要在B类中实现回调函数。如假设A类是网络请求开源类ASIHttpRequest,它可能请求成功,也可能请求失败。这个时候,B类...
  • AndYouAndMe
  • AndYouAndMe
  • 2015-12-31 10:02:31
  • 9856

静态函数的优点 static

静态函数 在函数的返回类型前加上关键字static,函数就被定义成为静态函数。   函数的定义和声明默认情况下是extern的,但静态函数只是在声明他的文件当中可见,不能被其他文件所用。 定义静...
  • u011392772
  • u011392772
  • 2016-01-04 13:39:15
  • 1961

机器学习的来临在日常中给我们带来了什么变化?

机器学习是一个关于计算机建模和利用模型来模拟人类智力活动的学科。随着计算机和网络的飞速发展,机器学习在我们的生活和工作中扮演着越来越重要的角色,这改变了我们的生活和工作。我们日常生活中的机器学会了如何...
  • jiqi_xuexi0224
  • jiqi_xuexi0224
  • 2018-03-13 19:42:41
  • 63

什么是闭包,闭包的作用与好处是什么,何时使用闭包,对闭包的改进

闭包:外部函数定义的内部函数就是闭包。 闭包的作用及好处:闭包给访问外部函数定义的内部变量创造了条件。也将关于函数的一切封闭到了函数内部,减少了全局变量,这也是闭包的真实含义。 与普通函数...
  • wzw_mzm
  • wzw_mzm
  • 2017-02-24 14:11:23
  • 2903
收藏助手
不良信息举报
您举报文章:类的静态成员函数带来了什么好处,应该在什么时候使用?
举报原因:
原因补充:

(最多只允许输入30个字)