Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;:非成员函数和静态成员函数之间的区别?_C++_Static Members_Non Member Functions - Fatal编程技术网

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)更加清晰,更重要的是,比我的老师(以及对这个问题的研究)更加清晰,特别是在授予友谊和成员可见性方面。