C ++成员函数与自由函数

时间:2009-06-08 23:31:39

标签: c++ function methods

在编写程序的过程中,我一直对这个设计决策感到困惑,但是我不能100%确定何时应该让函数成为类的成员函数,什么时候离开它作为一个普通函数,其中其他源文件可以在头文件中公开函数声明时调用该函数。对类的成员变量的期望访问是否与大多数时间的决策有关?

3 个答案:

答案 0 :(得分:28)

Herb Sutter的接口原则

对于类X,所有函数,包括自由函数,都是 (a)“提及”X和
(b)“提供”X
在逻辑上是X的一部分,因为它们构成了X的接口的一部分。

深入讨论阅读Herb Sutter的Namespaces and the Interface Principle

EDIT
实际上,如果你想了解C ++,请阅读所有内容 Herb Sutter写的内容:)

答案 1 :(得分:2)

我需要维护状态时使用类。如果函数不需要访问维护状态信息,那么我更喜欢自由函数,因为它使测试和代码重用更容易。

如果我有一堆相关的功能但不需要维护状态,那么我更喜欢将自由函数放在命名空间中。

答案 2 :(得分:0)

如果某些东西需要访问成员变量或对象实例的某个方面,那么它应该成为一个方法。

如果它与类密切相关,但不需要访问任何实例特定信息,那么它应该成为一个共享函数(或类函数,或静态函数,具体取决于您正在处理的编程语言)

即使它只是一个通用函数,很可能你会拥有多个函数,并且可以根据某些概念对它们进行聚合/组织。然后,您可以创建一个表示该概念的类,并使它们成为共享函数。

鉴于上述情况,我再也没有理由再创建独立功能了。