第12章 运算符重载

上传人:ldj****22 文档编号:48594991 上传时间:2018-07-17 格式:PPT 页数:20 大小:87.50KB
返回 下载 相关 举报
第12章 运算符重载_第1页
第1页 / 共20页
第12章 运算符重载_第2页
第2页 / 共20页
第12章 运算符重载_第3页
第3页 / 共20页
第12章 运算符重载_第4页
第4页 / 共20页
第12章 运算符重载_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《第12章 运算符重载》由会员分享,可在线阅读,更多相关《第12章 运算符重载(20页珍藏版)》请在金锄头文库上搜索。

1、C+程序设计 余苏宁 王明福 高教社第12章 运算符重载 n本章教学目标:认识运算符重载的必要性,理解运算 符重载的概念;掌握运算符重载的规则;能够对一般 的运算符进行重载;理解怎样把一个类的对象转换为另一 个类的对象掌握转换和转换构造函数定义方法; 。C+程序设计 余苏宁 王明福 高教社第12章 运算符重载 n12.1引入运算符重载的必要性 n12.2运算符重载的规则 n12.3含有指针数据成员的运算符重载 n12.4用户定义的转换 n12.5下标运算符重载 n12.6运算符重载的例子 C+程序设计 余苏宁 王明福 高教社12.1引入运算符重载的必要性 n我们知道,在 C+中,对于内定义类型

2、(如 int,char,float以及它们的导出类 型),其可以执行的操作均由相应运算符来指定。如当+运算符用于两int变量时,系统 执行整数加法。而在我们定义的类中,系统并没有规定相应的操作,因此有必要规定 其相应的操作。 n例复数相加class Complexdouble rpart; /默认为 private,复数的实部double ipart; /复数的虚部 public:Complex()rpart = ipart = 0; /内部构造函数Complex(double rp,double ip) /另一个构造函数rpart = rp; ipart = ip; C+程序设计 余苏宁 王

3、明福 高教社Complex Complex:add(const Complextemp.rpart = com.rpart + rpart;temp.ipart = com.ipart + ipart;return temp;现在,就可以用它进行两复数的加法了:Complex a(10,7), b(3, 5);Complex c = a.add(b); n这种加法运算采用函数数调用的形式,并不直观。我们能不能表示成c = a + b的样子呢?答案是肯定的。实质上,象+,-等运算符可以看作是一种函 数,即运算符函数,因此我们也可以象重载函数一样重载运算符 。C+程序设计 余苏宁 王明福 高教社n

4、上述加法函数我们用运算符重载可以表示为:Complex Complex:operator + (const complx /调用构造函 数return temp;其中operator为关键字。于是我们就可以用c = a + b的形式来调用了。 当然,根据函数的一般调用方式,我们也可以表示成c = a.operator + (b) C+程序设计 余苏宁 王明福 高教社n在C+中 ,可以重载的运算符 :+ - * / % 当 它用作外部函数时,带有一个参数。(6)对于单目后缀运算符,当它用作成员函数时,应带一个int参数(一 般不使用,只是与单目前缀运算符区分开);当它用作外部函数时,带有两个参

5、数,第一个是相应类的参数,第二个是int参数。 C+程序设计 余苏宁 王明福 高教社(7)无论定义的运算符重载函数是成员函数还是外部函数,都可以进行 重载。也就是说,可以定义多个同名的运算符函数,但其参数类型应有差别 ,以免产生二义性。(8)用户可重载己有的运算符,但不能定义自己的运算符,因为这常常 会带来二义性。假如定义了*,以便进行乘方运算,对于表达式a*b编译器 将无法确定是将其当作a*(*b)还是a*b。 (9)编译器预定义=(赋值)、 /存放消息串的指针成员public:messages() /构造函数buffer = new char(0); /为buffer申请内存并初始化成空串

6、messages() /析构函数deletebuffer;void displays() /显示消息cout=sz) /越界 cout”error”endl; exit(1); return ai;现在,对于对象:ainteger a1(10);我们就可以进行如下的运算了: ai3 = 2;对于左值ai3,系统调用ai.operator(3)。由此,我们可以看出 为什么上述函数定义时返回值要带其中,T1表示数组运算的返回结果类型,为了能对数组赋值,一般将 其声明为引用型;T表示定义下标运算的类;T2表示下标的类型。它们都可以 是任意类型(内定义类型,用户自定义类型)。在有了上述定义后,就可以用 两种形式来调用它:Xy 或 X.operator(y)C+程序设计 余苏宁 王明福 高教社12.6 运算符重载的例子 n例12.1位集运算符重载。 (略)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号