资源描述:
《C暑期实践课程第08讲》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、2021/7/15TsinghuaUniversity,lily12021/7/15TsinghuaUniversity,lily1第8讲多态性—运算符重载李莉(lily)清华大学计算机系2021/7/15TsinghuaUniversity,lily22021/7/15TsinghuaUniversity,lily2本讲总体纲要第1部分:多态性概念第2部分:运算符重载2021/7/15TsinghuaUniversity,lily32021/7/15TsinghuaUniversity,lily3第1部分:多态性概念2021/7/15TsinghuaUniversity,lily
2、42021/7/15TsinghuaUniversity,lily4纲要——第1部分:多态性概念多态性的概念多态性的形式2021/7/15TsinghuaUniversity,lily55多态性的概念多态性是面向对象程序设计的重要特征之一。多态从实现的角度来讲可以划分为两类:编译时的多态和运行时的多态。前者是在编译的过程中确定了同名操作的具体操作对象,而后者则是在程序运行过程中才动态地确定操作所针对的具体对象。2021/7/15TsinghuaUniversity,lily66多态的形式常见形式函数重载运算符重载虚函数2021/7/15TsinghuaUniversity,lily
3、72021/7/15TsinghuaUniversity,lily7本讲总体纲要第1部分:多态性概念第2部分:运算符重载2021/7/15TsinghuaUniversity,lily82021/7/15TsinghuaUniversity,lily8第2部分:运算符重载2021/7/15TsinghuaUniversity,lily92021/7/15TsinghuaUniversity,lily9纲要——第2部分:运算符重载为何需要重载运算符?运算符重载的实质、形式以及规则和限制运算符重载为类的成员函数运算符重载为类的友元函数流运算符重载2021/7/15TsinghuaUni
4、versity,lily1010为何需要重载运算符?C++把用户定义的类和基本数据类型一样看待。系统为基本数据定义了运算符(如+-*/)。C++中预定义的运算符其运算对象只能是基本数据类型,而不适用于用户自定义类型(如类)。允许用户自定义的类类型定义这些运算符。重新定义运算符的运算规则就称为重载运算符。运算符重载能提高程序可读性,但并不是必须的。运算符重载看作类中提供的另一种形式的接口。2021/7/15TsinghuaUniversity,lily1111问题举例——复数的运算classcomplex//复数类声明{public:complex(doubler=0.0,doubl
5、ei=0.0)//构造函数{real=r;imag=i;}voiddisplay();//显示复数的值complexadd(complexc2);//成员函数private:doublereal;doubleimag;};2021/7/15TsinghuaUniversity,lily1212complexcomplex::add(complexc2){complexc;c.real=c2.real+real;c.imag=c2.imag+imag;returncomplex(c.real,c.imag);}intmain()//主函数{complexc1(5,4),c2(2,10
6、),c3;c3=c1.add(c2);return0;}2021/7/15TsinghuaUniversity,lily1313问题举例——复数的运算用“+”、“-”能够实现复数的加减运算吗?complexc1(5,4),c2(2,10),c3;c3=c1+c2;实现复数加减运算的方法——重载“+”、“-”运算符2021/7/15TsinghuaUniversity,lily1414complexcomplex::operator+(complexc2){complexc;c.real=c2.real+real;c.imag=c2.imag+imag;returncomplex(c
7、.real,c.imag);}intmain()//主函数{complexc1(5,4),c2(2,10),c3;c3=c1+c2;//相当于c1.operator+(c2)return0;}2021/7/15TsinghuaUniversity,lily1515运算符重载的实质运算符重载是对已有的运算符赋予多重含义,实质就是函数重载。实现机制将指定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参。编译系统对重载运算符的选择,遵循函数重载的选择原则