Visual_C++程序设计案例教程 教学课件 作者 谭建辉第8章   多态性.ppt

Visual_C++程序设计案例教程 教学课件 作者 谭建辉第8章   多态性.ppt

ID:50308001

大小:180.50 KB

页数:19页

时间:2020-03-07

Visual_C++程序设计案例教程 教学课件 作者 谭建辉第8章   多态性.ppt_第1页
Visual_C++程序设计案例教程 教学课件 作者 谭建辉第8章   多态性.ppt_第2页
Visual_C++程序设计案例教程 教学课件 作者 谭建辉第8章   多态性.ppt_第3页
Visual_C++程序设计案例教程 教学课件 作者 谭建辉第8章   多态性.ppt_第4页
Visual_C++程序设计案例教程 教学课件 作者 谭建辉第8章   多态性.ppt_第5页
资源描述:

《Visual_C++程序设计案例教程 教学课件 作者 谭建辉第8章   多态性.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第8章  多态性8.1经典案例引入编写一个有关日期(年、月、日)的程序.该程序的运行结果如下8.1.1案例分析在本程序中,从运行的结果来看首先输出date,是初始化的值,然后在提示下输入日期20081214,日期date++结果为2008-12-15,日期date—结果为2008-12-14。该程序中日期是个类,类对象实现自加自减,在前面的知识中没有讲到,只有整数变量实现自加自减。8.1.2解决案例知识通过分析上面的例子,程序中日期是个类,类对象实现自加自减,在前面的知识中没有降到,只有整数变量实现自加自减。在这里解决这个问题用到了运算符的重载。重载有函数重载和运算符重载。重载

2、能实现多态性。多态性(polymorphism)是指同一种事物有多种形态。C++语言中的多态性是指对同一条消息,不同对象将产生不同的响应动作。实现多态性除了重载,还有虚函数也能实现多态性。函数重载在第四章讲了,接下来我们将学习运算符重载和虚函数相关的知识。8.2运算符重载8.2.1运算符重载实例例8_1用运算符实现复数的加减运算。程序运行结果如下:8.2.1运算符重载的格式与规则1.运算符重载的格式将运算符重载为类的成员函数将运算符重载为类的友元函数将运算符重载为类的成员函数,在类中的声明格式:函数类型operator运算符(参数表);定义该函数的格式:函数类型类名::oper

3、ator运算符(参数表){函数体;}也可以将重载运算符函数的定义直接写在类中。2.运算符重载的规则(1)除“.”、“*”、“::”、“?:”和“sizeof”等几个运算符不能重载外,C++中几乎所有的运算符都可以重载。(2)运算符被重载后,其优先级和结合性不会改变。(3)不能改变运算符操作对象的个数。8.3运算符重载为类的成员函数8.3.1双目运算符重载双目运算符,如果重载为类的成员函数,其参数为一个,即比运算对象少一个。例8_2复数的乘法运算,在上例的基础上添加乘法运算符重载函数。复数类乘法运算的定义如下:(a+bi)*(x+yi)=a*x-b*y+(a*y+b*x)I运行结

4、果如图8.3.2单目运算符重载为了区分前置运算和后置运算,C++规定:1)对于前置单目运算符,重载函数没有参数2)对于后置单目运算符,重载函数有一个整型参数,这个整型参数没有其他用途,只是用于区分前置运算与后置运算。例8_3定义一个CInt类,类中只有一个数据成员i,两个运算符“++”的重载函数,一个没有参数,实现的是前置运算符重载,另一个有一个整型参数,实现后置运算符重载。8.2.3赋值运算符重载如果类的数据成员比较复杂(如含有指针),直接赋值就会产生问题,需要重载赋值运算符“=”才能正确使用“=”。例8_4类A只有一个数据成员str,是一个字符指针,在构造函数中为str申请

5、存储空间并赋值,在析构函数中释放内存。运行结果如图:8.2.3赋值运算符重载例8_5带有重载赋值运算符的A类。运行结果如图:8.4运算符重载为类的友元函数8.4.1问题的提出(1)复数与复数相加(c1,c2,c3是复数类的对象)。c3=c1+c2;(2)一个复数与一个实数的加法运算。c3=c1+10.8;(3)一个实数与一个复数相加就会出现错误。c3=10.8+c1;因为加号左边的运算对象是实数,C++试图将加号右边的运算对象解释为实数,但C++无法将一个复数转换为一个实数,从而产生错误。将运算符重载为友元函数可以解决这个问题。8.4.2运算符重载为友元函数类中的声明:frie

6、nd函数类型operator运算符(参数表);运算符重载函数的定义形式:函数类型operator运算符(参数表){函数体;}例8_6用友元函数实现复数类加减运算符的重载。8.5虚函数8.5.1用虚函数实现动态多态(1)将成员函数声明为虚函数,在函数原型前加关键字virtual,如果成员函数的定义直接写在类中,也在前面加关键字virtual。(2)将成员函数声明为虚函数后,再将基类指针指向派生类对象,在程序运行时,就会根据指针指向的具体对象来调用各自的虚函数,称之为动态多态。(3)如果基类的成员函数是虚函数,在其派生类中,原型相同的函数自动成为虚函数。8.5.1用虚函数实现动态多

7、态例8_7使用虚函数实现动态多态。程序的运行结果如图8.5.2虚析构函数析构函数也可以定义为虚函数。如果基类的析构函数定义为虚析构函数,则派生类的析构函数就会自动成为虚析构函数。如果基类的指针指向派生类对象,当用delete删除这个对象时,若析构函数不是虚函数,就要调用基类的析构函数,而不会调用派生类的析构函数。如果为基类和派生类的对象分配了动态内存,或者为派生类的对象成员分配了动态内存,这时释放的只是基类中动态分配的内存,而派生类中动态分配的内存未被释放,因此一般应将析构函数定义为虚析构函

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

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

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