我正在寻找一篇文章或文档,解释为什么自由静态函数比私有成员函数更好,当给定函数不修改或读取类的私有成员时。就我而言,优点是:
减少依赖
更好的封装(对于“猛犸”类,它有助于知道至少那些函数调用不会修改成员)
我确信有人已经写了比我能做的更好的东西。
答案 0 :(得分:4)
免费静态功能正在进行中。可以使用匿名命名空间中的函数。
它们稍微更易于维护 - 因为它们无法访问私有成员,所以它们对于实现细节的更改非常强大。静态成员函数也可以独立于实现细节,但是您没有编译器验证它。
答案 1 :(得分:3)
你似乎在滥用某些词语,所以我会尝试澄清
class myclass {
private:
int data;
void func1(); // private mutator function
void func2() const; // private accessor function
static void func3(); // private static function
public:
int moredata;
void func4(); // public mutator function
void func5() const; // public accessor function
static void func6(); // public static function
}
void func7(myclass); // free function
static void func8(myclass); // static function can't be accessed outside file.
通常,运算符重载倾向于释放函数,以便在查找期间可以在需要转换时找到它们
当没有外部函数或类将调用这些函数时,将使用私有函数
静态函数在不读取或写入myclass时使用,但是是类的概念的整体部分。
常量函数可以在const
个对象上使用,不要修改类。
答案 2 :(得分:3)
如果您是专门寻找文章,您应该阅读Scott Meyers撰写的Effective C++中的“项目23:将非会员非朋友功能推荐给会员功能”。我建议这本书对所有认真的C ++程序员来说都是必读的。
本主题的基本前提是,如果您可以使用类的现有接口方法实现自由函数,那么您应该这样实际上简化了类。也就是说,可以看到类的内部的代码越少,封装得越多。实际上,添加更多膨胀减少了封装。
答案 3 :(得分:1)
encapsulation
表示组合相关数据和功能。所以这里无关紧要。const
,但根据上下文,它仍然可以很乐意属于class
,而不是被迫成为孤独的static
{{ 1}}功能。就个人而言(这可以辩论)我相信你应该将所有相关的功能整合到一个class
或最简单的namespace
而不是单独留下它们。< / p>
虽然来自java,但是从设计pov来看,这是一个有效的例子:http://download.oracle.com/javase/1.5.0/docs/api/java/util/Arrays.html,http://download.oracle.com/javase/1.5.0/docs/api/java/util/Collections.html