- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C总结友元类和友元函数
C++总结 ----- 友元类和友元函数
2007-05-15 10:20:18
如果将类的封装比喻成一堵墙的话,那么友元机制就像墙上了开了一个门,那些得
到允许的类或函数允许通过这个门访问一般的类或者函数无法访问的私有属性和方
法。友元机制使类的封装性得到消弱,所以使用时一定要慎重。
■ 友元类的说明
将外界的某个类在本类别的定义中说明为友元,那么外界的类就成为本类的“朋
友”,那个类就可以访问本类的私有数据了。
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++一个必要的知识点,一个完整的组成部分,我们还是需要讨论一下的。
下面我们来看一段代码,看看我们是如何利用友元来访问类的一切成员的
//程序作者:管宁 //站点: //所有稿件均有版权,如要转载,请务必著名出处和作者 #include iostream 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 name[20]; char address[20]; }; void ShowN(Internet obj) //函数定义,不能写成,void Internet::ShowN(Internet obj) { coutendl; //可访问internet类中的成员} void main() { Internet a(中国软件开发实验室,); ShowN(a); cin.get(); } 上面的代码通过友元函数的定义,我们成功的访问到了a对象的保护成员name,友元函数并不能看做是类的成员函数,它只是个被声明为类友元的普通函数,所以在类外部函数的定义部分不能够写成void Internet::ShowN(Internet obj),这一点要注意。
一个普通函数可以是多个类的友元函数,对上面的代码我们进行修改,注意观察变化:
//程序作者:管宁 //站点: //所有稿件均有版权,如要转载,请务必著名出处和作者 #include iostream using namespace std; class Country; class Internet { public: Internet(char *na
您可能关注的文档
- 2013——2014年福州市高中教师岗位远程培训教学安排表.doc
- 2013—2014学年第二学期化学实验教学计划.doc
- 2013——2014学年第二学期四年级级部工作总结.doc
- 2013-2014学年度第一学期三年级语文第一次检测(样卷).doc
- 2013-2017年聚合物锂离子蓄电池行业动态运行趋势及销售投资研究报告.doc
- 2013-2018年电子测斜仪市场深度分析与投资前景预测.docx
- 2013-2018年度中国低碳化学品市场市场预测趋势及前景分析报告.doc
- 2013-2018年度中国钢铁物流产业运行态势及投资前景预测报告.doc
- 2013-2018年度中国新能源基地建设市场预测动态及前景分析报告.doc
- 2013-2018年度中国乙醇胺市场未来发展前景及风险评估报告.doc
文档评论(0)