- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C++程序设计教程 第 9 章 友元与运算符重载; 第9章 友元函数与运算符重载9.1 友元函数与友元类9.2 运算符重载9.3 一元运算符重载9.4 二元运算符重载 ● 习题 ● 实验 ● 课堂练习;9.1 友元函数与友元类;1. 友元函数概念 类中用关键字friend说明或定义的外部函数,成员的访问权限对其不起作用,即可以访问类中所有访问权限的成员。
2. 友元函数定义(1) 类中说明,类外定义 ① 类中原型说明: friend 类型 函数名(形参列表); ② 类外定义: 类型 函数名(形参列表){ 函数体 }(2) 类中直接定义 friend 类型 函数名(形参列表){ 函数体 };【例9-1】求圆柱体的体积(友元、成员与普通函数比较)#includeiostream.hconst float PI=3.1415 ;class A { float r,h;public: A(float a,float b){r=a;h=b;} float v1( ){ return PI*r*r*h;} float getr(){return r;} float geth(){return h;}};
float v2(A t){ return PI*t.getr()*t.getr()*t.geth();}
float v3(A t){ return PI*t.r*t.r*t.h;}; 使用友元函数时注意:
(1) 类的访问控制权限只对类的成员起作用,对友元函数不起作用,因此友元函数的声明可以出现在类中的任何位置。
(2) 友元函数没有this指针,不能直接使用类的成员,必须指明成员所属的对象。所以友元函数的形参通常是类的对象、对象的引用、指针。
(3) 友元函数是外部函数,不能通过对象调用,应该直接调用。
(4) 友元函数能提高程序的运行效率,但破坏了类的封装性,应谨慎使用。
(5) 友元关系不具有继承性。假设函数f是基类A的友元函数,类B是类A的派生类,而函数f并不是类B的友元函数,即函数f中不能直接访问类C的私有成员。; C++允许将一个类说明为另一个类的友元类。如将类C说明为类B的友元类,则类C的成员函数将全部成为类B的友元函数。
【例9-2】设计一个类作为另一个类的友元类。class C;class B{ public: void sub(C ),show(C);};
class C{ int a,b;public: C(int x,int y){a=x; b=y;} friend class B; //将类B说明为类C的友元类 };
void B::sub(C t){ t.a--; t.b--; }
void B::show(C t){ coutt.a‘\t’t.b‘\n’;}
void main(){ B b1; C c1(30,40); b1.show(c1); b1.sub(c1); b1.show(c1);} ;1. 运算符重载概念 通常情况下, C++运算符的操作数为基本类型的数据,不能进行对象的运算。若要使对象参与运算,必须重新定义运算符的运算规则,称为运算符重载。运算符重载实质是定义运算符重载函数,即通过对象成员的运算实现对象的运算。为了方便对成员的操作,该函数通常是类的成员函数或者是友元函数。
2. 运算符重载方法 定义运算符重载函数,函数名由关键字operator与其后的运算符组成。
(1) 用类的成员函数重载 函数类型 operator 运算符 (形参列表) { 函数体 }
(2) 用类的友元函数重载 friend 函数类型 operator运算符 (形参列表) { 函数体 } ;【例9-3】重载负号运算符-,求复数的负值。#include iostream.hclass Com{ float real,image;public: Com(float r=0,float i=0) { real=r; image=i; } void print() { coutreal\timageendl; }};
void main(){ Com c1(25,50),c2; c2=-c1;
文档评论(0)