类的静态成员函数带来了什么好处,应该在什么时候使用?
2011-10-13 18:15
585 查看
函数的行为对所有派生类都一致时,可以声明为静态。
静态成员函数的作用基本上相当于一个带有命名空间的全局函数。
如一个数学类定义了一些函数
都可以声明伪静态的
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的角度考虑,一切不需要实例化就可以有确定行为方式的函数都应该设计成静态的。
以上只是一些基本的考虑,并不是绝对的。绝对东西的只有一点:“静态函数不需要实例化就可以被调用,不会也不可以调用或操纵非静态成员”。记住这一点,那么实际编程中何时需要用,何时适合用,自然就更容易作出决定了。
静态成员函数的作用基本上相当于一个带有命名空间的全局函数。
如一个数学类定义了一些函数
都可以声明伪静态的
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的角度考虑,一切不需要实例化就可以有确定行为方式的函数都应该设计成静态的。
以上只是一些基本的考虑,并不是绝对的。绝对东西的只有一点:“静态函数不需要实例化就可以被调用,不会也不可以调用或操纵非静态成员”。记住这一点,那么实际编程中何时需要用,何时适合用,自然就更容易作出决定了。
相关文章推荐
- 类的静态成员函数带来了什么好处,应该在什么时候使用?
- 类的静态成员函数带来了什么好处,应该在什么时候使用?
- 类的静态成员函数带来了什么好处,应该在什么时候使用?
- 类的静态成员函数带来了什么好处,应该在什么时候使用?
- 类的静态成员函数带来了什么好处,应该在什么时候使用?
- c++:静态成员变量和静态成员函数使用问题
- 问题记录:cocos2dx-C++静态成员函数的使用问题
- Static静态成员函数的使用
- 软件开发者面试百问-----什么时候使用带有静态成员的类,什么时候使用单例?
- 类的静态成员函数和静态成员变量的使用
- C++静态成员变量和静态成员函数的使用方法总结
- 类的静态成员变量和静态成员函数的使用方法二
- MATLAB OOP记点东西2-成员函数访问成员变量(使用静态成员函数)
- 类的静态成员变量和静态成员函数的使用方法三
- [转载] 什么时候应该使用 ==?什么时候应该使用 Equals?
- C++类的静态变量成员和静态成员函数的使用
- C++使用线程函数pthread_create时,调用的成员函数要定义为静态成员函数
- C++ 静态成员函数使用不需要声明
- 使用"研发项目进度管理软件"给企业能带来什么好处?
- static 静态成员变量 静态成员函数 类中使用