C++类的友元
友元是一个与访问控制权限相关的概念。C++语言可以在定义类的时候声明友元,向类外的某些函数或类定向开放类中的所有成员。被类声明为友元的函数称为该类的友元函数,被声明为友元的类称为该类的友元类。
一、友元函数(可以设为类的内联函数)
友元函数的语法形式:
class 类名
{
. . .
frined 返回值类型 友元函数名(参数列表);//友元函数的原型声明
};
友元函数的语法细则:
1)在类声明部分声明友元函数额原型,声明时使用关键字friend。声明语句可以放在大括号内的任意位置,该位置的访问权限与友元函数无关。
2)友元函数是类外的其他函数,不是类的成员。
3)友元函数可以在其他函数体内访问该类对象的所有成员,不受权限约束。
示例:
class A
{
public: int x;
protected: int y;
private: int z;
public:
A(int p1=0,int p2=0,int p3=0) {x=p1;y=p2;z=p3}
frined void fun1(); //声明类外函数fun1为类A的友元函数,此时类外函数可以访问x,y,z
}
二、友元类
示例:
class B
{
. . .
void fun1();
void fun2();
};
class A
{
. . .
frined void B:: fun1(); //声明类B中的fun函数为类A的友元函数
};
如果类B中所有函数成员都是类A的友元函数,则称类B为类A的友元类。声明友元类时不需要逐个声明其函数成员,而是采用统一声明的语法形式:
class A
{
. . .
frined class B; //声明类B为类A的友元类
};
声明为类A的友元类后,类B的函数成员就可以在函数体中访问A类对象的所有成员,包括保护成员和私有成员。
注意:
1)友元关系时单向的。若类A声明类B时自己的友元类,并不意味着A同时成为B的友元,除非对方声明。
2)友元关系不能传递。假设类B时类A的友元,类C又是类B的友元,这并不意味着类A和C之间存在任何友元关系,除非它们自己单独声明。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构