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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM