- 1、本文档共54页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
关于“自赋值” 所谓“自赋值”就是,当 class A { … }; A a,b; 之后写出的 a = a; 有人会说,谁会写出那么蠢的语句?! 的确,不会有人蠢到如此地步,可是不显式写出 a = a; 不能保证不写出隐含形式语句!如: c[i] = c[j]; 在 i==j 时就是 a = a;又如: *pa = *pb ; 在 pa 和 pb 指向同一对象时;还有更加隐晦的: void dosomething(Base rb, Derived * pd); 其中rb和*pd尽管类型不同,可是在公有继承下有可能是同一对象(别忘了类型兼容规则)。 总之, “自赋值”是防不胜防的事,而且发生的很隐晦。程序员的责任就是一定要写出“有免疫力”的程序,而不是让使用你程序的用户使用时战战兢兢如履薄冰。 友元 友元是C++提供的一种突破封装的机制。 通过将一个模块声明为一个类的友元,这个模块能够使用类中本是被隐藏的数据成员。 友元不是组合,定义和调用时不受类作用域限制。 为了确保数据的完整性,及数据封装与隐藏的原则,建议尽量不使用或少使用友元。 谚语:记住,朋友带来的麻烦往往多于便利! 友元分类 友元函数:将一个普通函数安插到类中,成为该类的“朋友”。于是这个函数就拥有了访问类中所有成员的特权。 友元成员函数:将一个类的某个成员函数安插到另一个类中,成为该类的“朋友”。于是这个函数就拥有了访问那个类中所有成员的特权。 友元类:将整个类安插到另外一个类中,成为该类的“朋友”。于是这个类的所有成员函数就拥有了访问该类中所有成员的特权。 这三种外来户都不是类的正式成员,都不受所在类的节制,都拥有任意访问类成员的特权。 友元函数 私有成员 公有成员 友元函数 主体类 友元成员函数 私有成员 公有成员 私有成员 公有成员 友元成员函数 主体类 另一个类 友元类 私有成员 公有成员 友元类 主体类 使用友元函数计算两点距离 class Point //Point类声明 { public: //外部接口 Point(int xx=0, int yy=0) {X=xx;Y=yy;} int GetX() {return X;} int GetY() {return Y;} friend double Distance(Point a, Point b); private: //私有数据成员 int X,Y; }; 使用友元函数计算两点距离 double Distance( Point a, Point b) { double dx=a.X-b.X; double dy=a.Y-b.Y; return sqrt(dx*dx+dy*dy); } int main(){ Point p1(3.0, 5.0), p2(4.0, 6.0); double d = Distance(p1, p2); coutThe distance is dendl; return 0; } 友元函数的调用! 没有友元将如何实现? 友元与普通函数的区别! class A { friend class B; public: void Display() {coutxendl;} private: int x; }; class B { public: void Set(int i); void Display(); 友元类举例 友元类 此二函数是何关系? 重载/重定义? private: A a; }; void B::Set(int i) { a.x=i; } void B::Display() { a.Display(); } 友元类举例 访问组合对象的私有成员正是友元的“特长”。 这是类的组合 友元关系的性质 友元关系是单向的 如果B类是A类的友元,则B类的函数可以访问A类的私有和保护数据,但A类的成员函数却不能访问B类的私有、保护数据。(孙悟空钻进铁扇公主肚里。) 友元关系不能传递 如果B类是A类的友元, C类是B类的友元,若没特别声明,则 C类和A类无友元关系。 (朋友的朋友不见得是朋友!) 友元关系不能继承 如果B类是A类的友元, B类的子类不会自动成为A类的友元类。(借来的东西不是遗产。) 内嵌类:在类体内又定义一个类——内层类。外面的类称为外围类。内嵌类又称为“成员类”。 这个内嵌类以及由它创建的对象,都局限在外围类作用域中,并受外围类的访问权限所管辖。 内层类的成员函数对外围类的成员没有访问权,反之亦然。即使可用,也仍然要遵循“对象名
您可能关注的文档
- 3.1.2数列的通项公式程序.ppt
- 3.3身体的防卫程序.ppt
- 大象版六年级科学上册复习概念.ppt
- 大型活动安检工作理论与实务概念.ppt
- 7-2.3基因的显性和隐性程序.ppt
- 大型项目推广会概念.ppt
- 5食物的消化和吸收课件程序.ppt
- 大学《公共关系》第5章:组织形象与CIS战略第一节组织形象概念.ppt
- 1.1孟德尔的豌豆杂交实验(一)分离定律程序.ppt
- 大学CD1-12概念.ppt
- 小学科学:ESP8266智能插座电路原理与动手实践研究教学研究课题报告.docx
- 《金融开放浪潮下我国多层次监管体系构建与创新研究》教学研究课题报告.docx
- 区域教育质量监测中人工智能应用的数据质量分析与优化策略教学研究课题报告.docx
- 《金融科技监管中的数据治理与合规性要求》教学研究课题报告.docx
- 《3D打印技术在航空航天领域中的多材料制造与复合材料应用》教学研究课题报告.docx
- 《绿色金融发展中的政府职能与市场机制研究》教学研究课题报告.docx
- 《植物工厂多层立体栽培光环境调控技术对植物生长发育节律的调控机制探讨》教学研究课题报告.docx
- 销售团队年度业绩总结.docx
- 银行风险管理与金融危机防范.docx
- 银行网络攻击预警与快速响应机制.docx
最近下载
- 2025年江西管理职业学院教师招聘考试笔试备考题库.docx VIP
- 2024中国中信金融资产管理股份有限公司人力资源部(党委组织部)社会招聘笔试模拟试题及答案解析.docx VIP
- 高考英语完型填空汇总.doc VIP
- 合作经营合同(2020).docx VIP
- 关节活动度测定ppt课件.pptx VIP
- 体育教师专业发展计划.doc VIP
- 影视产业概论 教学大纲.docx VIP
- 明星志愿3群星合辑(星光圆舞曲+银色幻想曲)攻略-详细整理版精要.docx
- Q-CR 570-2017 电气化铁路接触网用力矩控制式胶粘型锚栓.docx VIP
- 煤矿机电事故专项应急预案及现场处置方案.pdf VIP
文档评论(0)