友元函数和友元类
友元函数和友元类在其内部对这个类的访问权限等于这个类的成员的访问权限。
友元函数
-
声明:
class MyClass { public: int a,b; private: int c; public: friend void show(MyClass& cls) //友元函数 { printf("%d %d %d\n",a,b,c); MyClass a; cout << a.a << a.b << a.c; } }
这里的
show
函数就是MyClass
类的友元函数,他可以访问MyClass
类中的private、protected、public、
成员变量。
友元类
-
声明:
class MyClass { public: int a; public: friend class FriendClass; //将FrinedClass声明为友元类 private: int b,c; } class FriendClass { public: void f1(MyClass& c) { printf("%d %d %d\n", c.a, c.b, c.c); //可以访问MyClass的private成员变量 MyClass a; cout << a.a << a.b << a.c; } }
友元类(FriendClass)里的所有函数均可访问声明友元类的这个类(MyClass)的所有变量;注意:友元在类内可以只是声明,实现在外部。另外,如果友元需要访问这个类,那必须在友元之前声明这个类。
说是友元函数、友元类,但我更愿意称之为间谍函数,间谍类。因为friend
声明并不是双向的。形式上MyClass
把FriendClass
放在自己的类作用域内,看起来就像把一个间谍(Friend)放在家里,什么东西对间谍(FriendClass)的都是可见的,而间谍(FriendClass)的的东西我(MyClass)却见不到。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步