欢迎来到天天文库
浏览记录
ID:59207448
大小:732.50 KB
页数:52页
时间:2020-09-26
《第4章面向对象程序设计课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、面向对象程序设计Object-OrientedProgramming知识要点:1多态性概述-----“领会”的层次。2运算符重载-----“简单应用”的层次。3虚函数-----“简单应用”的层次。4抽象类-----“简单应用”的层次。第四章运算符重载和多态性Operatoroverloadingandpolymorphism4.1多态性概述4.1多态性概述多态是指同样的消息被不同类型的对象接收后导致完全不同的行为,消息是指对类的成员函数的调用,不同的行为是指不同的实现,也就是调用了不同的函数。4.1.1多态的类型面向对象的多态性可以分为4类:重
2、载多态、强制多态、包含多态和参数多态。前面两种统称为专用多态,而后面两种也称为通用多态。重载多态,普通函数及类的成员函数的重载。强制多态是指将一个变元的类型加以变化,以符合一个函数或者操作的要求。如把整型数变为浮点数再相加的情况,就是强制多态的实例包含多态是研究类族中定义于不同类中的同名成员函数的多态行为,主要是通过虚函数来实现。参数多态与类模板(类属)相关联,在后面章节中介绍的类模板是一个参数化的模板,在使用时必须赋予实际的类型才可以实例化。4.1多态性概述4.1.2多态的实现多态从实现的角度来讲可以划分为两类:编译时的多态和运行时的多态。前
3、者是在编译的过程中确定了同名操作的具体操作对象,而后者则是在程序运行过程中才动态地确定操作所针对的具体对象。确定操作的具体对象的过程就是联编(binding)。联编是指计算机程序自身彼此关联的过程,也就是把一个标识符名和一个存储地址联系在一起的过程;用面向对象的术语讲,就是把一条消息和一个对象的方法相结合的过程。按照联编进行的阶段的不同,分为两种不同的联编方法:静态联编和动态联编。联编工作在编译连接阶段完成的情况称为静态联编,比如重载、强制和参数多态联编工作在程序运行阶段完成的情况称为动态联编,也称为晚期联编或后联编,如包含多态。4.2运算符重
4、载【案例】运算符重载在计算器程序中的应用【案例需求】:设计一个控制台计算器程序,实现输入任意数学表达式都能进行数学计算,运算包括加、减、乘、除,可以带括号,还可包含数学中复数的计算【案例说明】:本案例中涉及到多个问题或任务的实现,首先考虑的是输入的是一个表达式字符串,可以带括号,这里需要将表达式分割成相应的运算的操作数和运算符分别放入相应栈中,并根据运算符的优先级进行计算。这个问题在数据结构中似乎可以得到解决。其次,在分割过程中遇到了1+2i的数据类型,这里是复数,需要定义复数类,那么简单的基本数据可以进行可以直接用+进行相加,如X=1+2,但
5、是复数在C++中不是基础数据类型,需要我们自己定义复数类,复数对象,使M3=M1+M2;如果程序中也能用+号进行复数相加得到的还是复数,那么是否可以直接相加形成上述程序表达式呢?用传统的运算符进行参与表达式计算,需要对运算符的功能进行重新定义,使之具备也能操作新的数据类型的能力,我们称之为运算符重载。4.2运算符重载#includeclasscomplex//复数类{floatreal,imag;public:complex(floatr=0,floati=0){real=r;imag=i;}voidshow(){cou
6、t<7、只要将z=x+y;改成z=x.add(y),但这样的代码在形式上不如z=x+y显得直接简单,C++已经提供了具备运算符重载的功能,实际上这些运算符本质上即是函数构成。对于表达式x=5+7来说,编译器在处理它时,并不知道符号“+”表示什么意思,它可以将这个表达式解释成函数调用的形式:x=operator+(5,7)调用的函数原型如下所示:intoperator+(inta,intb){returna+b;}voidmain(){complexx(5,2);complexy(4,3);complexz;z=x.add(y);//z=x+y;z.sh8、ow();}类似于函数add(5,7)所完成的功能4.2运算符重载operator+(5,7)的这种调用形式和普通的函数调用还是不同的,一般称之为运算
7、只要将z=x+y;改成z=x.add(y),但这样的代码在形式上不如z=x+y显得直接简单,C++已经提供了具备运算符重载的功能,实际上这些运算符本质上即是函数构成。对于表达式x=5+7来说,编译器在处理它时,并不知道符号“+”表示什么意思,它可以将这个表达式解释成函数调用的形式:x=operator+(5,7)调用的函数原型如下所示:intoperator+(inta,intb){returna+b;}voidmain(){complexx(5,2);complexy(4,3);complexz;z=x.add(y);//z=x+y;z.sh
8、ow();}类似于函数add(5,7)所完成的功能4.2运算符重载operator+(5,7)的这种调用形式和普通的函数调用还是不同的,一般称之为运算
此文档下载收益归作者所有