关于免费静态功能使用的文章

时间:2011-11-15 22:38:12

标签: c++ encapsulation

我正在寻找一篇文章或文档,解释为什么自由静态函数比私有成员函数更好,当给定函数不修改或读取类的私有成员时。就我而言,优点是:

  • 减少依赖

  • 更好的封装(对于“猛犸”类,它有助于知道至少那些函数调用不会修改成员)

我确信有人已经写了比我能做的更好的东西。

4 个答案:

答案 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)

  1. encapsulation表示组合相关数据和功能。所以这里无关紧要。
  2. 如果某个函数没有更改成员变量,则会将其标记为const,但根据上下文,它仍然可以很乐意属于class,而不是被迫成为孤独的static {{ 1}}功能。
  3. 就个人而言(这可以辩论)我相信你应该将所有相关的功能整合到一个class或最简单的namespace而不是单独留下它们。< / p>

    虽然来自java,但是从设计pov来看,这是一个有效的例子:http://download.oracle.com/javase/1.5.0/docs/api/java/util/Arrays.htmlhttp://download.oracle.com/javase/1.5.0/docs/api/java/util/Collections.html