




已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 软件外包创新-洞察及研究
- 北京市密云区2024-2025学年八年级下学期期末道德与法治试题(含答案)
- 出差安全培训课件
- 国庆节庆祝致辞素材
- 冰箱厂发泡模具安全培训课件
- 智能建筑中的物联网安全与隐私-洞察及研究
- 澳门药品定价管理办法
- 储存类容器培训课件
- 路言协议离婚中关于共同生活费用分割合同
- 语音速记服务保密协议与版权保护合同
- 律师事务所客户数据安全管理制度
- 孕妇学校健康教育课件
- 医务人员艾滋病知识培训
- erp权限管理制度
- 厦门垃圾分类题目及答案
- 湘美版(2024)美术一年级上册第1课 桑叶和蚕宝宝 课件T内嵌视频
- (中职)仪器分析技术(项目1-15)配套教材课件完整版电子教案
- 数字人文资源本体建模-洞察及研究
- 2025船舶光租合同范本
- T/CIES 002-2016照明工程设计收费标准
- T/CCS 063-2023井工煤矿智能化供排水系统运维管理规范
评论
0/150
提交评论