C++ C++;:非成员函数和静态成员函数之间的区别?
这里有一个简单的问题:静态成员函数(即无需对象访问即可调用的函数(仅使用类标识符))和非成员函数之间有什么区别?在这里,我从概念和功能两方面提出了问题C++ C++;:非成员函数和静态成员函数之间的区别?,c++,static-members,non-member-functions,C++,Static Members,Non Member Functions,这里有一个简单的问题:静态成员函数(即无需对象访问即可调用的函数(仅使用类标识符))和非成员函数之间有什么区别?在这里,我从概念和功能两方面提出了问题 非成员函数在概念上是静态的吗 静态成员函数可以访问类的私有和受保护部分。默认情况下,非成员函数不能这样做。只有班级给予他们友谊,他们才能做到这一点 另一个要考虑的问题是静态成员函数的名称在类的范围内。多个类可以具有相同名称的静态成员函数,而不必担心名称冲突。我想附加@R Sahu的答案,重载运算符可能不是类的静态函数。:) 静态函数本身也可以被保
非成员函数在概念上是静态的吗 静态成员函数可以访问类的私有和受保护部分。默认情况下,非成员函数不能这样做。只有班级给予他们友谊,他们才能做到这一点
另一个要考虑的问题是静态成员函数的名称在类的范围内。多个类可以具有相同名称的静态成员函数,而不必担心名称冲突。
我想附加@R Sahu的答案,重载运算符可能不是类的静态函数。:)静态函数本身也可以被保护和私有。因此,在声明它们的类或其派生类之外,它们可能是不可访问的。静态成员函数的另一个优点是,如果要在Windows API中的线程中调用它,这是唯一的方法。CreateThread要求函数位于全局空间中,或者,如果它是成员函数,则必须是静态的。至少据我所知,这是无法回避的。看看@402,这是一个不同的问题。不过,谢谢你。这个问题组织得不是很好,但答案是。依我拙见,这些答案让您对您的问题有了一些了解(例如,“非静态函数接受附加参数,
this
,它是指向具有实例特定变量的类实例的指针。静态函数没有this
参数(因此,你不能在静态函数中使用这个
,只能访问静态数据成员。”)举一个例子。谢谢!你的答案比我的课本(Deitel)更加清晰,更重要的是,比我的老师(以及对这个问题的研究)更加清晰,特别是在授予友谊和成员可见性方面。