c ++全局函数和OOP?

时间:2010-06-04 12:09:58

标签: c++ oop

在C ++中,可以有一个'GLOBAL FUNCTION',这意味着它不属于任何类。我想知道这是不是违反了OOP的基本原则?

使用类中的静态全局函数或函数会有什么不同?我认为后者更多面向OOP。但是我可能错了......

编写多线程应用程序时难道不会变得更难吗?

4 个答案:

答案 0 :(得分:8)

类中的静态函数作为OO作为模块内的全局函数。事情是在JAVA,你没有选择。

在C ++中,您可以将全局函数封装在命名空间中,您不需要虚拟类来执行此操作。这样就可以实现模块化。

当然,您可以将函数置于命名空间之外,这样您就拥有了真正的全局函数。但这与具有一系列静态功能的JAVA厨房水槽类没有太大区别。这也是错误的代码,但对于小项目来说可能没问题:)

同样在C ++中,你有很多选择,可以将“全局”函数实际链接到一个类,作为运算符函数,可以作为一个类的朋友。

修改 至于多线程,你必须担心全局变量,而不是函数。

答案 1 :(得分:2)

C ++促进了许多编程范式:结构化,OOP,功能。

为小型(hello world-style)计划选择OO方法毫无意义。

对模块化程序使用结构化方法是没有意义的。

接下来,静态类函数比“自由”函数组织得更好;最重要的是,他们可以访问对象的私有变量 - 更好的封装。

答案 2 :(得分:1)

静态方法可以访问它们所在类的private static个字段,但这与全局函数的唯一区别。

全局函数存在,因为C ++大致是C的超集,而C具有全局函数。 C可用于OOP和非OOP编程。

坦率地说,无论您输入std::Math::max还是std::max,它确实会有所帮助吗?

答案 3 :(得分:1)

完全同意其他答案,我想补充一下我的建议。静态函数和静态方法几乎是相同的东西,滥用它们会导致糟糕的oo设计。如果要保持对象模型清洁,则只应在以下情况下使用静态函数/方法:

  • 他们不会产生依赖于对象状态的结果
  • 他们不会改变对象的状态