已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C+总结 - 友元类和友元函数 2007-05-15 10:20:18 windows环境多线程编程原理与应用中解释: 如果将类的封装比喻成一堵墙的话,那么友元机制就像墙上了开了一个门,那些得 到允许的类或函数允许通过这个门访问一般的类或者函数无法访问的私有属性和方 法。友元机制使类的封装性得到消弱,所以使用时一定要慎重。 友元类的说明将外界的某个类在本类别的定义中说明为友元,那么外界的类就成为本类的“朋友”,那个类就可以访问本类的私有数据了。class Merchant private : int m_MyMoney; int m_MyRoom; Public: Friend class Lawyer; Int getmoney(); ; Class Lawyer Private: Public: ; 只有你赋予某个类为你的友元时,那个类才有访问你的私有数据的权利。 说明一个函数为一个类的友元函数则该函数可以访问此类的私有数据和方法。定义方法是在类的定义中,在函数名前加上关键字friend. 挑战30天C/C+这样解释: 在说明什么是友元之前,我们先说明一下为什么需要友元与友元的缺点: 通常对于普通函数来说,要访问类的保护成员是不可能的,如果想这么做那么必须把类的成员都生命成为public(共用的),然而这做带来的问题遍是任何外部函数都可以毫无约束的访问它操作它,c+利用friend修饰符,可以让一些你设定的函数能够对这些保护数据进行操作,避免把类成员全部设置成public,最大限度的保护数据成员的安全。 友元能够使得普通函数直接访问类的保护数据,避免了类成员函数的频繁调用,可以节约处理器开销,提高程序的效率,但所矛盾的是,即使是最大限度大保护,同样也破坏了类的封装特性,这即是友元的缺点,在现在cpu速度越来越快的今天我们并不推荐使用它,但它作为c+一个必要的知识点,一个完整的组成部分,我们还是需要讨论一下的。 在类里声明一个普通数学,在前面加上friend修饰,那么这个函数就成了该类的友元,可以访问该类的一切成员。 下面我们来看一段代码,看看我们是如何利用友元来访问类的一切成员的 /程序作者:管宁 /站点: /所有稿件均有版权,如要转载,请务必著名出处和作者 #include using namespace std; class Internet public: Internet(char *name,char *address) / 改为:internet(const char *name , const char *address) strcpy(Internet:name,name); strcpy(Internet:address,address); friend void ShowN(Internet &obj); /友元函数的声明 public: /改为:privatechar name20; char address20; ; void ShowN(Internet &obj) /函数定义,不能写成,void Internet:ShowN(Internet &obj) endl; /可访问internet类中的成员 void main() Internet a(中国软件开发实验室,); ShowN(a); cin.get(); 上面的代码通过友元函数的定义,我们成功的访问到了a对象的保护成员name,友元函数并不能看做是类的成员函数,它只是个被声明为类友元的普通函数,所以在类外部函数的定义部分不能够写成void Internet:ShowN(Internet &obj),这一点要注意。 一个普通函数可以是多个类的友元函数,对上面的代码我们进行修改,注意观察变化: /程序作者:管宁 /站点: /所有稿件均有版权,如要转载,请务必著名出处和作者 #include using namespace std; class Country; class Internet public: Internet(char *name,char *address) / 改为:internet(const char *name , const char *address) strcpy(Internet:name,name); strcpy(Internet:address,address); friend void ShowN(Internet &obj,Country &cn);/注意这里 public: char name20; char address20; ; class Country public: Country() strcpy(cname,中国); friend void ShowN(Internet &obj,Country &cn);/注意这里 protected: char cname30; ; void ShowN(Internet &obj,Country &cn) ame|endl; void main() Internet a(中国软件开发实验室,); Country b; ShowN(a,b); cin.get(); 一个类的成员函数函数也可以是另一个类的友元,从而可以使得一个类的成员函数可以操作另一个类的数据成员,我们在下面的代码中增加一类Country,注意观察 /程序作者:管宁 /站点: /所有稿件均有版权,如要转载,请务必著名出处和作者 #include using namespace std; class Internet; class Country public: Country() strcpy(cname,中国); void Editurl(Internet &temp) ;/成员函数的声明 protected: char cname30; ; class Internet public: Internet(char *name,char *address) strcpy(Internet:name,name); strcpy(Internet:address,address); friend void Country:Editurl(Internet &temp); /友元函数的声明 protected: char name20; char address20; ; void Country:Editurl(Internet &temp) /成员函数的外部定义 strcpy(temp.address,); |temp.addressendl; void main() Internet a(中国软件开发实验室,); Country b; b.Editurl(a); cin.get(); 整个类也可以是另一个类的友元,该友元也可以称做为友类。友类的每个成员函数都可以访问另一个类的所有成员 /程序作者:管宁 /站点: /所有稿件均有版权,如要转载,请务必著名出处和作者 #include using namespace std; class Internet; class Country public: Country() strcpy(cname,中国); friend class Internet; /友类的声明 protected: char cname30; ; class Internet public: Internet(char *name,char *address) strcpy(Internet:name,name); strcpy(Internet:address,address); void Editcname(Country &temp); protected: char name2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年云南空港飞机维修服务有限公司四季度员工招聘(3人)笔试考试备考题库及答案解析
- 2025年新能源行业企业员工培训与发展报告
- 2025年新能源行业供应链金融产品与供应链金融创新案例报告
- 2025三峡人寿保险股份有限公司招聘15人考试笔试模拟试题及答案解析
- 2025湖南怀化市麻阳县人民医院招聘聘用制工作人员7人笔试考试备考试题及答案解析
- 2025山西阳泉市平定县从社区专职网格员中选聘社区专职工作人员笔试考试参考试题及答案解析
- 2026年泉州市直部分公办学校赴华东师范大学招聘编制内新任教师43人考试笔试备考题库及答案解析
- 2025浙江台州市温岭市产业大脑有限公司招聘2人笔试考试参考题库及答案解析
- 2025中国农业科学院哈尔滨兽医研究所宠物疫病创新团队编外派遣人员招聘(黑龙江)笔试考试备考题库及答案解析
- 2025河北雄安人才服务有限公司信访主管、综合文秘等岗位招聘6人笔试考试备考试题及答案解析
- 宁德时代shl测试题库以及答案解析
- DB11-T 2496-2025 古油松养护与复壮技术规程
- 安全员管理培训课件
- 发酵食品加工技术
- 抑郁症专业自测量表示例
- 无人机操作员绩效考核与奖励方案
- 男科基础知识培训课件
- 急诊叙事护理课件
- 行业领先企业面试题库:中储棉如何准备面试以成功入职
- 化学检测基础知识培训课件
- 2025年重庆市事业单位招聘考试综合类专业能力测试试卷(文秘类)
评论
0/150
提交评论