- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
友元函数ppt课件
友 元
引子
因为C++的封装性和数据隐藏性,只有类自身的函数才可以不受限制的访问类的非公有成员;任何非成员函数直接访问类中非公有数据成员都会导致编译错误.
例外情况:需要非成员函数去访问类的私有数据成员.
♂解决办法:1,把私有属性(private)变为公有(public)-----但这样做违背了数据封装性和数据隐藏性; 2,可把对应的非成员函数定义为该类的友元函数来解决.
友元函数
概念:友元函数就是可以直接访问类的成员(包括私有数据成员)的非成员函数.它是一个外部函数.
一个外部函数只能通过类的授权而成为友元函数.
友元函数
类如何授权一个函数作为友元函数?
答:通过在类的定义中声明函数,并且在该函数的声明前加上关键字friend,这样类和该函数之间创建了友元关系.关键字friend不能够在类的定义之外使用.
注:类的访问限定符(public,private和protected)对友元函数是不起作用的.
内容对应教材:9.10节
1 友 元 函 数
北京科海电子出版社 ·
声明友元函数的方式是在类声明中用关键词friend声明该函数,其格式
如下:
friend 函数类型 友元函数名(参数表);
1 友 元 函 数
[用例]P152 例,补充完整,编译运行.
1 友 元 函 数
北京科海电子出版社 ·
【用例】编写一个程序,以友元函数方式计算一个点到一条直线的距
离。
解:设计一个点类Point,它有两个公有数据成员x和y,表示点的坐标
(因为要在类外使用,所以设计为公有的)。另一个类为直线类Line,
它有3个私有数据成员a、b和c,表示直线方程ax+by+c=0,该类中设
计一个友元函数dist计算一个点到直线的距离。点(x,y)到直线
(ax+by+c=0)的距离d的计算公式如下:
1 友 元 函 数
//file.h
#ifndef FILE_H
#define FILE_H
class Point //点类
{
Public:
Point(int,int);
int x,y;
};
class Line //线类
{ public:
Line(int,int,int);
friend double dis(Line,point); //计算距离
private:
int a,b,c;
};
#endif
北京科海电子出版社 ·
1 友 元 函 数
//func.cpp
#includecmath
Point::Point(int x1,int y1):
X(x1),y(y1) { }
Line::Line(int a1,int b1,int c1) :a(a1),b(b1),c(c1) { }
double dis(Line m,Point n)
{ double d;
d=abs(m.a*n.x+m.b*n.y+m.c)/(sqrt(m.a*m.a +m.b*m.b));
return d;}
int main()
{ Point p(10,10);
Line t(2,4,-3);
cout“点到线的距离:”dis(t,p)endl;
} // 12.7456
2友 元 类
北京科海电子出版社 ·
C++中允许声明一个类为另一个类的友元类(friend class)。例如,
以下语句声明类B是类A的友元类:
class A
{
...
public:
friend class B;
...
};
2 友 元 类
[用例] #includeiostream
class A
{ int n;
public:
A() {n=5;}
friend class B;
};
class B
{ public:
void display( A t)
{ cout “n=“t.nendl;}
};
int main()
{
A a;
B b;
b.display(a);
}
您可能关注的文档
- 危重病人与肠内营养ppt课件.ppt
- 危重病人的病情观察与抢救护理ppt课件.ppt
- 危重病人的病情观察及抢救新职工2013课件.ppt
- 危重患者抢救护理ppt课件.ppt
- 危重病人的病情观察及抢救护理讲课图文ppt课件.ppt
- 危重病人的肠内营养支持ppt课件.ppt
- 危重病人的营养支持与管理ppt课件.ppt
- 危重病人相关安全管理huangyan课件.ppt
- 危重病人肠内营养ppt课件.ppt
- 危重病人肠内营养支持的护理ppt课件.ppt
- DB44_T+2767-2025河口海湾总氮、总磷水质评价指南.docx
- 中医药科技成果转化评价技术规范.docx
- DB44_T+2750-2025农村供水工程数字化建设技术导则.docx
- DB44_T+2769-2025金属矿山生态修复技术规范.docx
- 镁合金航天航空零部件长效防护微弧氧化膜层工艺规范.docx
- 《甘青青兰中绿原酸和胡麻苷含量的测定 高效液相色谱法》发布稿.pdf
- DB44_T+753-2025声环境质量自动监测技术规范.docx
- 信息技术 智算服务 异构算力虚拟化及池化系统要求.docx
- DB44_T+2759-2025黄荆栽培技术规程.docx
- 废生物制药溶媒再生乙腈.docx
原创力文档


文档评论(0)