多态性与虚函数.ppt

多态性与虚函数.ppt

ID:56529674

大小:239.00 KB

页数:51页

时间:2020-06-27

多态性与虚函数.ppt_第1页
多态性与虚函数.ppt_第2页
多态性与虚函数.ppt_第3页
多态性与虚函数.ppt_第4页
多态性与虚函数.ppt_第5页
资源描述:

《多态性与虚函数.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第八章多态性青岛科技大学张炜C++语言程序设计本章主要内容多态性(重点掌握)运算符重载(掌握)虚函数(重点掌握)虚析构函数(理解)纯虚函数抽象类现实生活中的多态录音机的控制台348.1多态性的概念多态性是面向对象程序设计的重要特征之一。多态性是指发出同样的消息被不同类型的对象接收时有可能导致完全不同的行为。消息——即对类成员函数的调用。多态的实现:函数重载运算符重载虚函数动态绑定静态绑定C++支持两种不同类型的多态:一种是编译时的多态,通过静态绑定实现.一种是运行时的多态,通过动态绑定实现。绑定是计算机程序自身彼此关联的过程,即把一个标识符

2、和一个存储地址联系在一起的过程。把一条消息和一个对象的方法相结合的过程。也就是把一个函数名与其实现代码联系在一起。静态绑定:绑定工作在编译连接阶段完成的。动态绑定:绑定工作在程序运行阶段完成的。6实现静态联编的前提是:在编译阶段就必须能够确定函数名与代码间的对应关系。因此,当通过对象名调用成员函数时,只可能是调用对象自身的成员,所以,这种情况可采用静态联编实现。但当通过基类指针调用成员函数时,由于基类指针可以指向该基类的不同派生类对象,因此存在需要动态联编的可能性,但具体是否使用动态联编,还要看所调用的是否是虚函数。7问题举例——复数的运算

3、classcomplex//复数类声明{public:complex(doubler=0.0,doublei=0.0)//构造函数{real=r;imag=i;}voiddisplay();//显示复数的值private:doublereal;doubleimag;};运算符重载8.2问题举例——复数的运算声明:complexa(10,20),b(1,2);用“+”、“-”能够实现复数的加减运算吗?“a+b”实现复数加减运算的方法——重载“+”、“-”运算符运算符重载8.2运算符重载的实质:函数重载运算符重载是对已有的运算符赋予多重含义必要

4、性C++中预定义的运算符其运算对象只能是基本数据类型,而不适用于用户自定义类型(如类)实现机制将指定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参。编译系统对重载运算符的选择,遵循函数重载的选择原则。运算符重载8.2运算符重载8.2.1规则和限制可以重载C++中除下列运算符外的所有运算符: 类属关系.成员指针.*作用域分辨符::三目?:和sizeof只能重载C++语言中已有的运算符,不可臆造新的。不改变原运算符的优先级和结合性。不能改变操作数个数。经重载的运算符,其操作数中至少应该有一个是自定义类型。8.2两种形式重载

5、为类成员函数。函数类型operator运算符(形参){......}重载为友元函数。friend函数类型operator运算符(形参){......}运算符重载8.2运算符函数声明形式函数类型operator运算符(形参){......}重载为类成员函数时参数个数=原操作数个数-1(后置++、--除外)重载为友元函数时参数个数=原操作数个数且至少应该有一个自定义类型的形参。运算符重载8.28.2.2运算符成员函数的设计双目运算符B如果要重载B为类成员函数,使之能够实现表达式oprd1Boprd2,其中oprd1为A类对象,则B应被重载为A类

6、的成员函数,形参类型应该是oprd2所属的类型。经重载后,表达式oprd1Boprd2相当于oprd1.operatorB(oprd2)运算符重载8.2运算符重载例8.1将“+”、“-”运算重载为复数类的成员函数。规则:实部和虚部分别相加减。操作数:两个操作数都是复数类的对象。8.2#includeusingnamespacestd;classcomplex//复数类声明{public://外部接口complex(doubler=0.0,doublei=0.0){real=r;imag=i;} //构造函数complex

7、operator+(complexc2);//+重载为成员函数complexoperator-(complexc2);//-重载为成员函数voiddisplay();//输出复数private://私有数据成员doublereal;//复数实部doubleimag;//复数虚部};16complexcomplex::operator+(complexc2)//重载函数实现{complexc;c.real=c2.real+real;c.imag=c2.imag+imag;returncomplex(c.real,c.imag);//创建一个临

8、时无名对象作为返回值}17complexcomplex::operator-(complexc2)//重载函数实现{complexc;c.real=real-c2.real;c.

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。