在C ++中,可以有一个'GLOBAL FUNCTION',这意味着它不属于任何类。我想知道这是不是违反了OOP的基本原则?
使用类中的静态全局函数或函数会有什么不同?我认为后者更多面向OOP。但是我可能错了......
编写多线程应用程序时难道不会变得更难吗?
答案 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设计。如果要保持对象模型清洁,则只应在以下情况下使用静态函数/方法: