C++ 中友元函数与友元类详解

总的来说,友元分为两类:友元函数与友元类。友元是针对类而言,它提供了一种非类的成员函数来访问类的非公有成员的一种机制。可以把一个函数指定为某类的友元,这个函数称为这个类的友元函数。也可以将类A指定为类B的友元,则类A是类B的友元类,类A的所有成员函数均是类B的友元函数,均可以访问类B的非公有成员。
友元函数的注意事项:
(1)友元函数不是类的成员函数,在函数体中访问对象的成员,必须用“对象名.对象成员"方式来访问, 友元函数可以访问类中的所有成员(公有,私有,保护),而一般的函数只能访问类的公有成员。
(2)友元函数不受类中的访问权限关键字的限制,可以将它放在类的公有,私有,保护部分,结果均一样。
(3)某类的友元函数的作用域并非该类作用域,如果该友元函数是另一类的成员函数,则其作用域为另一类的作用域,否则与一般函数相同。
(4)友元函数破坏了面向对象设计的封装特性。所以应该尽量少用。
友元类
如果某类B的成员函数会频繁地访问类A的数据成员,而类A的数据成员的private/protected限制造成了类B存取的麻烦,B只能通过A的Public的成员函数进行间接存取。这种情况下可以将类B作为类A的友元类,即类A向类B提供私有和保护成员的访问权限,让类B可以直接存取。
友元类中的所有成员函数均可以看作是另一类的友元函数。
友元类的声明: friend chass 类名;
下面是友元函数的例子
友元函数可以在类中声明,声明时在函数前增加friend关键字,然后在类体外定义,也可以直接在类中声明定义。这两种方式均可。下面例子中采取的是类中声明,类体外定义的方式。
class Point
{
friend double Distance(const Point &p1, const Point &p2); //类体中声明
public:
Point(int x, int y):x_(x), y_(y)
{};
private:
int x_;
int y_;
};
//类体外定义友元函数
double Distance(const Point &p1, const Point &p2)
{
double dx = p1.x_ - p2.x_; //直接访问类的私有成员
double dy = p1.y_ - p2.y_;
return sqrt(dx*dx+dy*dy);
}
int main()
{
Point p1(3,4);
Point P2(6,8);
cout << Distance(p1,p2) << endl;
return 0;
}
下面是友元类的例子:
class Television //电视类
{
friend class TeleController;//友元类声明
public:
Television(int volume, int chanel): volume_(volume), chanel_(chanel){}
private:
int volume_; //音量
int chanel_; //频道
};
class TeleController //遥控器类
{
public: //类中的每个成员函数都是电视类的友元函数,都可以访问电视类的私有数据成员
void VolumeUp(Television &tv)
{
tv.volume_ += 1; //音量加1
}
void VolumeDown(Television &tv)
{
tv.volume_ -= 1;
}
void ChanelUp(Television &tv)
{
tv.chanel_ += 1; //频道加1
}
void ChanelDown(Television &tv)
{
tv.chanel_ -= 1; //频道减1
}
};
int main()
{
Television tv(1,1);
TeleController tc;
tc.ChanelUp(tv);
return 0;
}
友元类需要注意以下几点:
(1)友元关系是单向的;
(2) 友元关系不能被传递: A是B的友元,B是C的友元,则A是C的友元,这种传递不成立
(3) 友元关系不能继承: A是B的友元,A的派生类C也是B的友元,这是不成立的。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# C++
# 友元
# C++友元类
# 友元函数
# C++中的友元函数与友元类详情
# 简要介绍C++编程中的友元函数和友元类
# C++之友元:友元函数和友元类详解
# c++友元函数与友元类的深入解析
# C++友元函数和友元类的使用与区别
# 类中
# 均可
# 体外
# 另一类
# 可以直接
# 某类
# 的是
# 都是
# 访问权限
# 不成立
# 这是
# 非公有
# 放在
# 来访问
# 希望能
# 不受
# 几点
# 造成了
# 将它
# 谢谢大家
相关文章:
建站之星后台搭建步骤解析:模板选择与产品管理实操指南
宝华建站服务条款解析:五站合一功能与SEO优化设置指南
制作营销网站公司,淘特是干什么用的?
如何做静态网页,sublimetext3.0制作静态网页?
建站主机类型有哪些?如何正确选型
简单实现Android验证码
如何通过老薛主机一键快速建站?
建站之星代理平台如何选择最佳方案?
网站插件制作软件免费下载,网页视频怎么下到本地插件?
香港服务器部署网站为何提示未备案?
如何快速生成ASP一键建站模板并优化安全性?
建站主机是否等同于虚拟主机?
浅谈Javascript中的Label语句
如何在云主机上快速搭建网站?
微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?
高防服务器租用首荐平台,企业级优惠套餐快速部署
常州企业建站如何选择最佳模板?
设计网站制作公司有哪些,制作网页教程?
如何在阿里云购买域名并搭建网站?
jQuery 常见小例汇总
相册网站制作软件,图片上的网址怎么复制?
建站VPS选购需注意哪些关键参数?
c# 在ASP.NET Core中管理和取消后台任务
c# 在高并发场景下,委托和接口调用的性能对比
浅析上传头像示例及其注意事项
如何通过虚拟主机快速完成网站搭建?
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?
c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗
建站之星logo尺寸如何设置最合适?
深圳网站制作案例,网页的相关名词有哪些?
如何高效完成自助建站业务培训?
制作门户网站的参考文献在哪,小说网站怎么建立?
个人网站制作流程图片大全,个人网站如何注销?
微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?
公司网站设计制作厂家,怎么创建自己的一个网站?
音响网站制作视频教程,隆霸音响官方网站?
如何快速搭建自助建站会员专属系统?
沈阳制作网站公司排名,沈阳装饰协会官方网站?
网站制作费用多少钱,一个网站的运营,需要哪些费用?
贸易公司网站制作流程,出口贸易网站设计怎么做?
成都网站制作公司哪家好,四川省职工服务网是做什么用?
如何在云主机上快速搭建多站点网站?
零基础网站服务器架设实战:轻量应用与域名解析配置指南
武汉外贸网站制作公司,现在武汉外贸前景怎么样啊?
php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】
在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?
建站主机如何选?高性价比方案全解析
清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?
如何规划企业建站流程的关键步骤?
*请认真填写需求信息,我们会在24小时内与您取得联系。