zoukankan      html  css  js  c++  java
  • c++ 静态类成员函数(static member function) vs 名字空间 (namespace)

    好多人喜欢把工具函数做成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

  • 相关阅读:
    团队项目第二阶段——第一天
    团队项目第一阶段绩效评估
    铁大树洞与市面上现有APP对比
    第一阶段其他组评价汇总
    第一阶段对其他组的评价
    铁大树洞app功能演示和使用说明
    团队冲刺——第十天
    团队冲刺——第九天
    团队冲刺——第八天
    梦断代码读后感04--毁灭即拯救
  • 原文地址:https://www.cnblogs.com/zhangdongsheng/p/6992820.html
Copyright © 2011-2022 走看看