C++ 友元函数与非成员函数
我搜索了很多我不能理解的东西,但是我真的没有找到一个正确的答案来解决我关于“朋友”和非成员函数的一个小难题。所以,这里是 这是一个示例代码,其模式与我看到的各个代码类似:C++ 友元函数与非成员函数,c++,C++,我搜索了很多我不能理解的东西,但是我真的没有找到一个正确的答案来解决我关于“朋友”和非成员函数的一个小难题。所以,这里是 这是一个示例代码,其模式与我看到的各个代码类似: struct SampleClass { friend void foo1(SampleClass &rhs); void foo2(); private: int bar; }; void foo1(SampleClass& rhs) { rhs.foo2(); } voi
struct SampleClass
{
friend void foo1(SampleClass &rhs);
void foo2();
private:
int bar;
};
void foo1(SampleClass& rhs)
{
rhs.foo2();
}
void foo3(SampleClass& rhs)
{
rhs.foo2();
}
int main()
{
SampleClass samp;
foo1(samp); //friend function
foo3(samp); //not a friend function but has the same effect
return 0;
}
为什么我们使用由“friend”关键字标识的非成员类函数与非成员类函数相似?为什么第一个函数(“friend”函数)不能通过知道“friend”函数或类可以访问宿主类的私有成员来访问“bar”变量?函数协议需要匹配。更改:
friend void foo1();
致:
@什么意思有同样的影响,void foo2()是一个公共函数…谢谢Joseph。在反复阅读和检查我的代码之后,我终于明白了。问题是,我没有考虑在类之外的非成员类函数和正常函数中访问类的私有成员。那是我不知道的事。我很难理解你的意思<代码>foo2显然是公开的。尝试键入
rhs.bar=5代码>而不是rhs.foo2()代码>然后您将看到差异。请包含您感到困惑的代码。既然如此,这里似乎没有问题。(bar
,唯一的private
东西,永远不会被访问。)
friend void foo1(SampleClass& rhs);