c++ 静态类成员函数(static member function) vs 名字空间 (namespace)

简介: 好多人喜欢把工具函数做成static member function。这样以增加隐蔽性和封装性,由其是从C#,java转而使用c++的开发人员。 例如: class my_math { public: static UINT Hash_XYZ(float x,float ...

 

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

 

相关文章
|
存储 Cloud Native Linux
C++ namespace对全局变量屏蔽的工程化意义解读
C++ namespace对全局变量屏蔽的工程化意义解读
|
编译器 C语言 C++
【C++】命名空间 ( namespace )
【C++】命名空间 ( namespace )
|
3月前
|
C语言 C++
C++(六)Namespace 命名空间
命名空间(Namespace)是为了解决大型项目中命名冲突而引入的机制。在多库集成时,不同类库可能包含同名函数或变量,导致冲突。C++通过语法形式定义了全局无名命名空间,并允许对全局函数和变量进行作用域划分。命名空间支持嵌套与合并,便于协同开发。其使用需谨慎处理同名冲突。
|
6月前
|
C++
C++一分钟之—名空间(namespace)的作用与使用
【6月更文挑战第22天】C++的命名空间是代码组织的关键,防止命名冲突并促进模块化。通过`namespace`定义代码块,如`MyNamespace{...}`,并使用别名(`namespace MN = MyNamespace::...`)简化引用。避免过度使用和嵌套,以及`using namespace`的滥用,而应在小范围内导入所需成员。明智选择名空间名称并有效利用`using`声明,能提升代码可读性和专业性。
154 1
|
6月前
|
C++
C++命名空间(namespace)的使用
C++命名空间(namespace)的使用
|
6月前
|
C++
c++中的using namespace std;
c++中的using namespace std;
162 1
|
7月前
|
C++
C++中使用namespace关键字定义和访问命名空间的技术性探讨
C++中使用namespace关键字定义和访问命名空间的技术性探讨
47 3
|
7月前
|
C++
C++命名空间(Namespace)详解
C++命名空间(Namespace)详解
103 2
|
7月前
|
C++
C++程序中的类成员函数
C++程序中的类成员函数
52 1
|
7月前
|
存储 编译器 C++
【C++成长记】C++入门 | 类和对象(上) |类的作用域、类的实例化、类的对象大小的计算、类成员函数的this指针
【C++成长记】C++入门 | 类和对象(上) |类的作用域、类的实例化、类的对象大小的计算、类成员函数的this指针