好多人喜欢把工具函数做成static member function。这样以增加隐蔽性和封装性,由其是从C#,java转而使用c++的开发人员。

例如:

class my_math
{
public:
static UINT Hash_XYZ(float x,float y,float z);
static UINT Hash_XY(floag t, float y);
//...
//...
}; namespace my_math
{
UINT Hash_XYZ(float x, float y, float z);
static UINT Hash_XY(float x, float y);
//...
//...
}
调用这个函数都是这样调用的
my_math::HashXYZ(3423.0f,234.2f,2344.0f)

这在里应该使用namespace而不是class,原因如下:

1.在《Effective c++》这本书条款23中提到:宁以non-member、non-friend替换member函数。面向对象守则要求,数据以及操作数据的那些函数应该捆绑在一起,而上面这个函数显然没有数据。

2.命名空间允许使用using namespace,在代码使用密集使用相关函数时在作用域里声明using namespace my_math可以简化代码

3.c++的类一般是用在声明对象时使用的(a kind of object),静态成员函数一般要跟他所在的类有所关联。

4.一般要用到static类成员函数有以下原因:a.你需要访问一个静态类成员;b.有一些模板函数,你正好需要去为所有函数指定一个模板参数。

5.namespace可以把声明和定义 放在不同的.h

最新文章

  1. FineReport:关于扩展行列求各种条件下的函数运用
  2. 关于变量和函数前&符号的作用
  3. log4net.config 单独文件
  4. 还有人在用SQL Server 2000或2005吗? 2014来了!
  5. HDU 4793 Collision --解方程
  6. js判断input为空校验
  7. clock gating and PLL
  8. 记录一下表格用poi的导出word
  9. Javascript模块化编程(一):模块的写法【转】
  10. Activiti 工作流得到最后一次批注的时间
  11. iOS实现OAuth2.0中刷新access token并重新请求数据操作
  12. HDU 1883 Phone Cell(计算几何)
  13. java并发编程(1) --并发基础及其锁的原理
  14. Mybatis 常用注解
  15. 算法题:合并N个长度为L的有序数组为一个有序数组(JAVA实现)
  16. 5-8套接字socket
  17. Android6.0源码下载编译刷入真机
  18. MySQL重做日志相关
  19. unity3d生命周期
  20. 几个PHP读取整个文件的函数readfile()、fpassthru()和file()

热门文章

  1. Permutations leetcode java
  2. Web安全学习规划
  3. c#:对两个字符串大小比较(不使用c#/java内部的比较函数),按升序排序
  4. capwap学习笔记——初识capwap(一)
  5. OnBecameVisible和OnBecameInvisible ,OnWillRenderObject
  6. Refuses to install for WTP10
  7. HTTPS 原理与证书实践
  8. FastDFS_v4.06+nginx-1.4.2配置详解
  9. springboot项目启动多个实例的方法
  10. jquery hasClass()、is()