欢迎来到天天文库
浏览记录
ID:39963171
大小:874.50 KB
页数:29页
时间:2019-07-16
《c程序设计《多态性与虚函数》》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、C++程序设计多态性与虚函数1第5章多态性与虚函数什么是多态性向上类型转换功能早绑定和晚绑定实现功能晚绑定——虚函数纯虚函数和抽象类学生信息管理系统中的多态性本章学习要点2第5章多态性与虚函数多态性是指用一个名字定义不同的函数,这些函数执行不同但又类似的操作,从而可以使用相同的调用方式来调用这些具有不同功能的同名函数。实现“一个接口,多种方法”35.1什么是多态性多态性可以分为4类:参数多态包含多态重载多态强制多态。45.1什么是多态性参数多态如函数模板和类模板。由函数模板实例化的各个函数都具有相同的操作,而这些函数的参数类型却各不
2、相同。同样地,由类模板实例化的各个类都具有相同的操作,而操作对象的类型是各不相同的。55.1什么是多态性包含多态是研究类族中定义于不同类中的同名成员函数的多态行为,主要是通过虚函数来实现的。65.1什么是多态性重载多态如函数重载、运算符重载等。前面我们学习过的普通函数及类的成员函数的重载都属于重载多态。75.1什么是多态性强制多态是指将一个变元的类型加以变化,以符合一个函数(或操作)的要求,例如加法运算符在进行浮点数与整型数相加时,首先进行类型强制转换,把整型数变为浮点数再相加的情况,就是强制多态的实例。85.2向上类型转换向上类型
3、转换是指把一个派生类的对象作为基类的对象来使用。向上转型中有三点需要我们特别注意。向上类型转换是安全的。向上类型转换可以自动完成。向上类型转换的过程中会丢失子类型信息。95.2向上类型转换【例5-1】一个向上类型转换的例子。#includeusingnamespacestd;classB0//基类B0声明{public:voiddisplay(){cout<<"B0::display()"<4、B1::display()"<display();}//通过“对象指针->成员名”的形式调用display()成员函数intmain(){B0b0;//声明B0类对象B1b1;//声明B1类对象D1d1;//声明D1类对象B0*p;//声明B0类指针pp=&b0;//B0类指针p指向B0类对象fun(p);p=&b1;//B0类指针p指向5、B1类对象fun(p);p=&d1;//B0类指针p指向D1类对象fun(p);return0;}105.3功能早绑定和晚绑定功能早绑定(编译时的多态性):绑定是在程序编译阶段完成。功能早绑定时,系统用实参与形参进行匹配,对于同名的重载函数便根据参数上的差异进行区分,然后进行绑定,从而实现了编译时的多态性。功能晚绑定(运行时的多态性):绑定是在程序运行阶段完成的。即当程序调用到某一函数名时,才去寻找和连接其程序代码,对面向对象程序设计而言,就是当对象接收到某一消息时,才去寻找和连接相应的方法。115.4实现功能晚绑定——虚函数成员函6、数的定义语法是:virtual函数类型函数名(形参表){函数体}125.2向上类型转换【例5-3】有一个交通工具类vehicle,将它作为基类派生出汽车类motor_vehicle,再将汽车类motor_vehicle作为基类派生出小汽车类car和卡车类truck,声明这些类并定义一个虚函数用来显示各类信息。程序如下:#includeusingnamespacestd;classvehicle//基类vehicle声明{public:virtualvoidmessage()//虚成员函数{cout<<"vehic7、lemessage"<8、明{public:voidmessage(){cout<<"carmessage"<
4、B1::display()"<display();}//通过“对象指针->成员名”的形式调用display()成员函数intmain(){B0b0;//声明B0类对象B1b1;//声明B1类对象D1d1;//声明D1类对象B0*p;//声明B0类指针pp=&b0;//B0类指针p指向B0类对象fun(p);p=&b1;//B0类指针p指向
5、B1类对象fun(p);p=&d1;//B0类指针p指向D1类对象fun(p);return0;}105.3功能早绑定和晚绑定功能早绑定(编译时的多态性):绑定是在程序编译阶段完成。功能早绑定时,系统用实参与形参进行匹配,对于同名的重载函数便根据参数上的差异进行区分,然后进行绑定,从而实现了编译时的多态性。功能晚绑定(运行时的多态性):绑定是在程序运行阶段完成的。即当程序调用到某一函数名时,才去寻找和连接其程序代码,对面向对象程序设计而言,就是当对象接收到某一消息时,才去寻找和连接相应的方法。115.4实现功能晚绑定——虚函数成员函
6、数的定义语法是:virtual函数类型函数名(形参表){函数体}125.2向上类型转换【例5-3】有一个交通工具类vehicle,将它作为基类派生出汽车类motor_vehicle,再将汽车类motor_vehicle作为基类派生出小汽车类car和卡车类truck,声明这些类并定义一个虚函数用来显示各类信息。程序如下:#includeusingnamespacestd;classvehicle//基类vehicle声明{public:virtualvoidmessage()//虚成员函数{cout<<"vehic
7、lemessage"<8、明{public:voidmessage(){cout<<"carmessage"<
8、明{public:voidmessage(){cout<<"carmessage"<
此文档下载收益归作者所有