第9章 友元函数与运算符重载.ppt

  1. 1、本文档共33页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第9章 友元函数与运算符重载

* 练习1: 下面关于运算符重载的描述错误的是( )。 A. 运算符重载不能改变操作数的个数、运算符的优先级、结合性和运算符的语法结构 B. 不是所有的运算符都可以进行重载 C. 运算符函数的调用必须使用关键字operator D. 在C++语言中不可通过运算符重载创造出新的运算符 C * 练习2: 在重载一个运算符时,如果其参数表中有一个参数, 则说明该运算符是( )。   A. 一元成员运算符 B. 二元成员运算符   C. 一元友元运算符 D.选项B和选项C都可能 D * 练习3: 函数重载和运算符重载实现的多态性属于________多态性。 静态 * * * 第9章 友元函数与运算符重载 * * 9.1 友元函数 9.2 运算符重载概述 9.3 一元运算符重载 9.4 二元运算符重载 * * 9.1 友元函数 为了强调类的数据封装性,常将一些关键成员设为私有访问特性---为什么引入友元? 友元可以是一个函数,该函数被称为友元函数;友元可以是一个类,该类被称为友元类。 友元函数是一种普通函数,不是类的成员函数,说明时在函数前面加以关键字friend,它可以象成员函数一样不受限制地访问该类的任何成员。 * * 友元函数的定义格式: (1)类中定义 friend 类型 函数名( 形参 ) { …函数体… } (2)类中说明,类外定义 类中原型说明: friend 类型 函数名(形参); 类外定义: 类型 函数名(形参) { …函数体… } * 【例9-1】求圆柱体的体积。 #includeiostream.h const float PI=3.1415 ; class A { float r,h; public: A(float a,float b){r=a;h=b;} friend float v1(A ); //友元函数v1的原型说明 float v2( ){ return PI*r*r*h;} //定义成员函数v2 float getr(){return r;} float geth(){return h;} }; 友元函数的形参为类的对象的引用 * float v1(A a) //友元函数v2在类体外的定义 { return PI*a.r*a.r*a.h;} float v3(A b) //全局函数 { return PI*b.getr()*b.getr()*b.geth();} void main() { A a1(25,40); A a2(25,40); coutv1(a1)“\n”; //调用友元函数v1 cout a2.v2( )“\n”; //调用成员函数v2 coutv3(a1); //调用全局函数v3 } 程序解读: v2作为类A的成员函数可以直接使用类中的所有成员,包括私有成员; V1作为类A的友元函数可以通过对象名加“.”运算符使用类中的所有成员,包括类中私有成员; V3作为普通的全局函数,只能通过对象名加“.”运算符来使用类中成员,且只能使用类中的公有成员。 * 注意: (1)类的访问控制权限对友元函数不起作用,因此友元函数 的声明可以出现在类中的任何地方。 (2)友元函数不能直接使用类的成员,必须指明成员所属的 对象。所以友元函数的形参通常是类的对象、对象的引 用、指针。 (3)友元函数的调用不同于成员函数的调用,应该直接调用。 (4)使用友元函数可减少函数的调用次数,提高程序的运行效 率,但它破坏了类的封装性,应谨慎使用。 (5)友元关系不具有继承性,即:假设f是基类A的友元函数, C是类A的派生类,那么f不能直接访问类C的私有成员。 * 练习1: 一个类的友元函数能够访问该类的( )。   A. 私有成员 B. 保护成员 C. 公有成员 D. 所有成员 D * 练习2: 有一友元函数的说明语句为: friend float fun(A , float * , float *); 则友元函数fun( )可能是 类的友元函数。 A * 9.2 运算符重载概述 对于大多数程序设计语言,运算符的定义由编译器给出,且这种用法是不允许用户改变的。在C++中,允许用户重新定义已有的运算符,并按规定要求去完成特定的操作。 使用成员函数或友元函数,通过操作对象成员,从而实现对象参加运算的目的。 * 运

文档评论(0)

***** + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档