欢迎来到天天文库
浏览记录
ID:59209331
大小:107.50 KB
页数:37页
时间:2020-09-26
《第6章 多态性与虚函数课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第6章多态性与虚函数6.1多态性概述所谓多态性就是不同对象收到相同的消息时,产生不同的动作。直观地说,多态性是指用一个名字定义不同的函数,这些函数执行不同但又类似的操作,从而可以使用相同的调用方式来调用这些具有不同功能的同名函数。多态性为用户提供单一接口示意图6.1.1多态的分类C++中的多态性可以分为四类:参数多态包含多态重载多态强制多态。前面两种统称为通用多态,而后面两种统称为专用多态。函数模板,类模板虚函数函数重载,运算符重载变元类型强制转换,以符合操作要求6.1.2多态的实现0.联编的概念。
2、联编(binding)就是把函数名与函数体的程序代码连接在一起的过程。通俗地讲,就是确定某一个同名标识到底是要调用哪一段程序代码。静态联编:在编译阶段完成的联编。动态联编:在程序运行阶段完成的联编。6.1.2多态的实现1.多态从实现的角度来讲可以划分为两类:编译时的多态和运行时的多态。编译时的多态是通过静态联编来实现的。编译时多态性主要是通过函数重载和运算符重载实现的。运行时的多态是用动态联编实现的。运行时多态性主要是通过虚函数来实现的。6.2虚函数虚函数提供了一种更为灵活的多态性机制。虚函数允许函
3、数调用与函数体之间的联系在运行时才建立,也就是在运行时才决定如何动作,即所谓的动态联编。6.2.1虚函数的引入例6.1虚函数的引例1。#includeclassA{public:voidshow(){cout<<"A";}};classB:publicA{public:voidshow(){cout<<"B";}};main(){Aa,*pc;Bb;pc=&a;pc->show();pc=&b;pc->show();return0;}运行结果:AA(AB)例6.2虚函数的引例
4、2。classBase{public:Base(intx,inty){a=x;b=y;}voidshow(){cout<<“Base-----------”;cout<5、rivate:intc;};例6.2虚函数的引例2。voidmain(){Basemb(60,60),*pc;Derivedmc(10,20,30);pc=&mb;pc->show();pc=&mc;pc->show();}运行结果:Base-----------------60Base-----------------10206.2.2虚函数的作用和定义例6.2修改方法:1.采用显式的方式调用派生类的函数成员:mc.show()或mb.show()2.采用对指针的强制类型转换的方法:((Deriv6、ed*)pc)->show()本来使用对象指针是为了表达一种动态的性质,即当指针指向不同对象时执行不同的操作,现在看来并没有起到这种作用。要实现这种功能,就需要引入虚函数的概念。这里,只需将基类的show()函数声明为虚函数即可。例6.3虚函数的作用。classBase{public:Base(intx,inty){a=x;b=y;}virtualvoidshow()//定义虚函数show(){cout<<"Base----------";cout<7、e:inta,b;};classDerived:publicBase{public:Derived(intx,inty,intz):Base(x,y){c=z;}voidshow()//重新定义虚函数show(){cout<<"Derived---------";cout<show();//调用基类Base的show()版本pc8、=&mc;pc->show();//调用派生类Derived的show()版本}程序运行结果如下:Base---------6060Derived--------301.虚函数的作用虚函数同派生类的结合可使C++支持运行时的多态性,实现了在基类定义派生类所拥有的通用接口,而在派生类定义具体的实现方法,即常说的“同一接口,多种方法”,它帮助程序员处理越来越复杂的程序。2.虚函数的定义虚函数的定义是在基类中进行的。它是在基类中需要定义为虚函数的成员函数的声明中冠以关键字v
5、rivate:intc;};例6.2虚函数的引例2。voidmain(){Basemb(60,60),*pc;Derivedmc(10,20,30);pc=&mb;pc->show();pc=&mc;pc->show();}运行结果:Base-----------------60Base-----------------10206.2.2虚函数的作用和定义例6.2修改方法:1.采用显式的方式调用派生类的函数成员:mc.show()或mb.show()2.采用对指针的强制类型转换的方法:((Deriv
6、ed*)pc)->show()本来使用对象指针是为了表达一种动态的性质,即当指针指向不同对象时执行不同的操作,现在看来并没有起到这种作用。要实现这种功能,就需要引入虚函数的概念。这里,只需将基类的show()函数声明为虚函数即可。例6.3虚函数的作用。classBase{public:Base(intx,inty){a=x;b=y;}virtualvoidshow()//定义虚函数show(){cout<<"Base----------";cout<7、e:inta,b;};classDerived:publicBase{public:Derived(intx,inty,intz):Base(x,y){c=z;}voidshow()//重新定义虚函数show(){cout<<"Derived---------";cout<show();//调用基类Base的show()版本pc8、=&mc;pc->show();//调用派生类Derived的show()版本}程序运行结果如下:Base---------6060Derived--------301.虚函数的作用虚函数同派生类的结合可使C++支持运行时的多态性,实现了在基类定义派生类所拥有的通用接口,而在派生类定义具体的实现方法,即常说的“同一接口,多种方法”,它帮助程序员处理越来越复杂的程序。2.虚函数的定义虚函数的定义是在基类中进行的。它是在基类中需要定义为虚函数的成员函数的声明中冠以关键字v
7、e:inta,b;};classDerived:publicBase{public:Derived(intx,inty,intz):Base(x,y){c=z;}voidshow()//重新定义虚函数show(){cout<<"Derived---------";cout<show();//调用基类Base的show()版本pc
8、=&mc;pc->show();//调用派生类Derived的show()版本}程序运行结果如下:Base---------6060Derived--------301.虚函数的作用虚函数同派生类的结合可使C++支持运行时的多态性,实现了在基类定义派生类所拥有的通用接口,而在派生类定义具体的实现方法,即常说的“同一接口,多种方法”,它帮助程序员处理越来越复杂的程序。2.虚函数的定义虚函数的定义是在基类中进行的。它是在基类中需要定义为虚函数的成员函数的声明中冠以关键字v
此文档下载收益归作者所有