【问题标题】:C++: Difference Between Non-Member Function and Static Member Function?C++:非成员函数和静态成员函数的区别?
【发布时间】:2014-04-22 21:28:27
【问题描述】:

简单的问题,这里:静态成员函数(即无需对象访问即可调用的函数(仅使用类标识符))与非成员函数有什么区别?在这里,我在概念上和功能上都在问。

非成员函数在概念上是静态的吗?

【问题讨论】:

  • @40two 这是一个不同的问题。不过,谢谢。
  • 这个问题组织得不是很好,但答案是。以我的拙见,考虑到您的问题,答案会给您一些见解(例如,“非静态函数接受附加参数this,它是指向具有特定于实例的变量的类实例的指针。静态函数不有this 参数(因此你不能在静态函数中使用this,只能访问静态数据成员。”)命名一个。

标签: c++ static-members non-member-functions


【解决方案1】:

静态成员函数可以访问类的私有和受保护部分。默认情况下,非成员函数不能这样做。只有当班级给予他们友谊时,他们才能做到这一点。

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

【讨论】:

  • 谢谢!你的回答比我的教科书 (Deitel) 更加清晰——除此之外,比我的老师(以及对问题的研究)更清晰,尤其是在给予友谊和成员知名度方面。
【解决方案2】:

我想附上 @R Sahu 的答案,重载的运算符可能不是类的静态函数。:)

静态函数本身也可以被保护和私有。因此它们在声明它们的类或其派生类之外是不可访问的。

【讨论】:

    【解决方案3】:

    静态成员函数的另一个优点是,如果您想在 Windows API 的线程中调用它,它是唯一的方法。 CreateThread 要求函数要么位于全局空间中,要么如果它是成员函数,则它必须是静态的。至少据我所知,没有办法绕过它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-20
      • 2010-11-02
      • 1970-01-01
      • 1970-01-01
      • 2014-04-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多