C++ 中全局函数和静态成员函数的一点小纠结

xiaofeng-huang 2018-03-08 06:41:47
从Android到c++ 的萌新一枚,最近在做一个项目遇到一个小纠结。
有几个算法,传入参数,输出返回值。在java中,因为必须要类才能有方法调用,所以这种情况我们都是用静态成员函数的方法去实现。可是c++中,有全局函数这种概念。似乎就让静态成员函数的定义失去了意义。因为我们只要在.h文件中实现全局函数,在要使用的地方将头文件引入,就可以直接使用了。至于连接冲突的问题,用宏定义就可以解决了。
可是又考虑到c++是一种面向对象的语言,使用静态成员函数似乎更符合面相对象的思想。

这让我有点纠结,类似于加减乘除的这种函数,我们要定义成全局函数好还是静态成员函数好呢?
还有,在编程中,什么情况下用全局函数什么情况下用静态成员函数呢?

希望各位前辈能够分享一下经验,谢谢!
...全文
519 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaofeng-huang 2018-03-09
  • 打赏
  • 举报
回复
好嘞,谢谢大家了
maoge8888 2018-03-08
  • 打赏
  • 举报
回复
像这种工具类的函数可以都写到一个类里面,并声明成静态函数。比如CFileUtil文件操作相关的类。工具类的特点就是不用实例化,通过类名::函数名,就直接可以调用。全局函数不建议使用,看起来比较零散。c++静态函数还有一个用途就是实例化自己,而不允许别人实例化,设计上叫单利模式。
还有一个用途是初始化类,有些时候一个类的实例之间需要共享资源,这时候就需要利用静态函数对共享资源进行初始化。因为静态函数能够在所有实例窗帘之前被调用。
狐狸小十 2018-03-08
  • 打赏
  • 举报
回复
都一样,区别就是怎么可以提高写代码效率 比如可以把一类全局函数写成静态,用的时候直接继承,this就出来了 再比如临时要个回调,直接在上边实现,就省得在头文件或者类里声明了
mstlq 2018-03-08
  • 打赏
  • 举报
回复
尽量用类的静态函数,一是可以简单避免命名冲突,二来可以更灵活控制权限访问,三是符合楼主从java带过来的习惯
zilaishuichina 2018-03-08
  • 打赏
  • 举报
回复
类的静态成员函数,依然是类的成员, 类的成员是受访问权限控制符限制的, 也就是说如果你申明一个 private : static void fun(); 你是没法在类外通过 XXX::fun(); 来调用的。 除此之外, 全局函数和静态成员函数没什么区别
paschen 版主 2018-03-08
  • 打赏
  • 举报
回复
程序效率两者是相同的,所以建议定义成静态成员函数,可以很大程度上减小名称冲突的可能性

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧