C++程序设计与实践:09-第7章 运算符重载_第1页
C++程序设计与实践:09-第7章 运算符重载_第2页
C++程序设计与实践:09-第7章 运算符重载_第3页
C++程序设计与实践:09-第7章 运算符重载_第4页
C++程序设计与实践:09-第7章 运算符重载_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、上次课的内容回顾 运算符重载复数类的例子运算符重载的两种形式:成员函数重载、类的友元函数重载单目运算符的重载:+(-)的例子双目运算符的重载:复数加法的例子、+=(-=)的例子运算符重载的基本原则常用运算符的重载特殊运算符的重载返回值类型 operator (参数列表);7.4 几种特殊运算符的重载7.4 几种特殊运算符的重载7.4.2 重载类型转换运算符在运算过程中、在函数参数传递中、在函数返回值过程中,类型转换是经常发生的。这些转换大体上可以分为三类: 标量类型向类类型转换; 类类型向标量类型转换; 类类型向类类型转换。7.4 几种特殊运算符的重载1. 标量类型向类类型转换在定义对象的时候

2、,可能发生标量类型到类类型的转换。例如:complex c = 3.0;编译器会调用类的构造函数来完成这个转换:complex c = complex(3.0); /用缺省参数调用complex(double,double)7.4 几种特殊运算符的重载7.4 几种特殊运算符的重载这类重载的类型转换运算符函数有如下特征: 不能为函数指定返回值类型;但函数体中的return语句必须返回一个与运算符同名类型的实例; 函数必须是类的成员,并且没有参数。(ex7-6)7.4 几种特殊运算符的重载3. 类类型向类类型转换类类型转化到其它类类型也是可能的。例如,复数的表示有两种: 直角坐标表示法。用实部和虚

3、部来表示,行为x+iy; 指数表示法,用指数reia形式来表示,其中r为模,a为幅角。两种表示法之间可以相互转换。(ex7-7)但对于使用new运算符创建的自由对象,情况就不那么乐观了。设有这样的指针和对象创建情况:Rectangle *p1 = new Rectangle(5, 6);Rectangle *p2 = new Rectangle(30, 40);智能指针智能指针(smart pointer)智能指针其实是一种封装了指针操作的类,这使得该类对象的行为非常像是一个指针。而该类的核心,就是重载的*和-运算符。这里,两个用于指针的运算符*和-只能以非静态成员函数的方式进行重载。那么,如

4、何让指针意识到它指向的对象无效了呢?7.4 几种特殊运算符的重载答案是使用计数器,它用于跟踪有多少个指针共享了一个对象(以下称为基础对象)。每一个基础对象都有一个与之关联的计数器提问:1. 计数器可以是基础对象的成员吗?2. 计数器可以是基础对象的静态成员吗?7.4 几种特殊运算符的重载再来看看智能指针的赋值情况。设有两个智能指针p1和p2分别指向了各自的基础对象。那么,在执行p1 = p2;时:1. p1的计数器减1。如果计数器减为0,则删除基础对象。2. p1指向基础对象2。3. p2的计数器加1。4. p1与p2共享相同的计数器。7.4 几种特殊运算符的重载基于以上的分析,可以看到,需要

5、两个关联的类来支撑智能指针体系:1. 计数器类class ptrCounterprivate:Rectangle *pRect; /指向基础对象的指针int counter;/计数ptrCounter(Rectangle *p) : pRect(p), counter(1) ptrCounter() delete pRect; ;请同学思考这几句代码的含义7.4 几种特殊运算符的重载7.4 几种特殊运算符的重载7.4 几种特殊运算符的重载对于该类的一个对象obj,表达式obj()被编译器解释为obj.operator()(参数列表);可以看到,()作用在类对象上时,形式非常类似于函数调用,但“函数名”不是真正代表了函数,而是一个对象的名字。这种含有重载()运算符的对象称为“函数对象(function object)”。7.4 几种特殊运算符的重载7.4.5重载运算符运算符只能以非静态成员函数的方式进行重载,其语法如下:class 类名public:返回值类型 operator(类型);运算符一般为顺序容器重载。我们可以把顺序容器

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论