C++:非成员函数和静态成员函数的区别?

7
简单的问题:静态成员函数和非成员函数之间有什么区别?静态成员函数可以不需要对象就能调用(只需使用类标识符),而非成员函数呢?在这里,我既想概念上理解又想了解其功能性。
非成员函数从概念上来说并不是静态的。

请查看https://dev59.com/TVvUa4cB1Zd3GeqPyOyE。 - 101010
@40two,那是一个不同的问题。谢谢你。 - Thomas
1
这个问题的组织不是很好,但答案却很棒。依我之见,这些答案可以让你对你的问题有一些了解(例如,“非静态函数接受额外的参数this,它是指向具有实例特定变量的类实例的指针。静态函数没有this参数(因此您不能在静态函数中使用this,只能访问静态数据成员。”)。 - 101010
3个回答

8

静态成员函数可以访问类的私有和保护部分。非成员函数作为默认情况下无法访问,只有在类授予友元关系时才能访问。

另一个需要考虑的是,静态成员函数的名称处于类的范围内。多个类可以有相同名称的静态成员函数而不必担心名称冲突。


谢谢!您的回答比我的教科书(Deitel)更加清晰明了,而且比我的老师(以及对这个问题的研究)更加深入,特别是关于授予友元和成员可见性方面。 - Thomas

1
我想补充一下@R Sahu的答案,重载运算符可能不是类的静态函数。:)
另外,静态函数本身可以是受保护和私有的。因此,在声明它们的类或其派生类之外是无法访问它们的。

0
静态成员函数的另一个优点是,它是在Windows API线程中调用函数的唯一方式。CreateThread要求函数必须在全局空间中,或者如果它是成员函数,则必须是静态的。至少在我所知道的范围内,没有其他方法可以绕过这个限制。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接