在编写程序的过程中,我一直对这个设计决策感到困惑,但是我不能100%确定何时应该让函数成为类的成员函数,什么时候离开它作为一个普通函数,其中其他源文件可以在头文件中公开函数声明时调用该函数。对类的成员变量的期望访问是否与大多数时间的决策有关?
答案 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)
如果某些东西需要访问成员变量或对象实例的某个方面,那么它应该成为一个方法。
如果它与类密切相关,但不需要访问任何实例特定信息,那么它应该成为一个共享函数(或类函数,或静态函数,具体取决于您正在处理的编程语言)
即使它只是一个通用函数,很可能你会拥有多个函数,并且可以根据某些概念对它们进行聚合/组织。然后,您可以创建一个表示该概念的类,并使它们成为共享函数。
鉴于上述情况,我再也没有理由再创建独立功能了。