欢迎来到天天文库
浏览记录
ID:38311418
大小:132.00 KB
页数:10页
时间:2019-06-09
《类的虚函数与多态性》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、类的虚函数与多态性1、类的多态性与虚函数概述类的多态性是面向对象程序设计的重要特征之一,所谓多态性指的是一个名称可以具有多种语义。利用多态性,用户只需发送一般形式的消息,而将所有的是先留给接受消息的对象,对象根据所接受的消息而做出相应的动作(即操作)。虚函数是实现多态性的重要机制之一。在C++中,多态性主要是通过函数名重载实现的。重载函数是指程序中对同名函数进行调用时,编译系统会根据函数参数的类型和个数,决定该调用那一段函数代码来处理这个函数调用。这种把函数调用与适当的函数代码相对应的动作,叫联编(binding)。联编静态联编:在编译阶段执行哪个同名的被调用函数。动态联编:在执行阶段据对象类
2、型来决定执行哪个类的成员函数。多态性静态:在一个类(函数)的同名函数,可据参数表(类型和个数)区别语义,并通过静态编联实现。动态:在一个类层次的不同类中的重载函数,它们一般具有相同的参数表,因而要根据指针指向的对象所在类来区分语义,通过动态编联实现类的虚函数与多态性关于静态编联和动态编联的区别由下例说明。【例1】计算并显示大学生和研究生的学费:#includeclassstudent{protected:intno;charname[10];intfee1,fee2,fee3,fee4,fee;public:voidcalfee(){cout<<“学号:”;cin>>n
3、o;cout<<“姓名”;cin>>name;fee1=4800;fee2=1100;fee3=400;fee4=200;fee=fee1+fee2+fee3+fee4;}voiddisp(){cout<<“学费:”<>no;cout<<“姓名”
4、;cin>>name;fee1=1100;fee2=400;fee3=200;fee=fee1+fee2+fee3;}voiddisp(){cout<<“住宿费:”<5、”<6、态联编,即执行fn(s)时据s对象来自动确定调用相应的成员函数,而不是在编译时就确定哪个重载函数被调用。运行时能据其类型确认调用哪个函数的能力称为多态性。即动态联编。类的虚函数与多态性2、虚函数虚函数是动态联编的基础,它是引入派生概念之后用来表现基类和派生类成员函数之间的一种关系的。虚函数在基类中定义,是一种成员函数。与重载函数的意义相同,虚函数也能使一个函数具有多种不同的版本;而它的不同版本在该类的派生类中重新进行定义。(1)虚函数说明说明虚函数的方法如下:virtual<类型说明符><函数名>(<参数表>)其中,关键词virtual说明的函数称为虚函数。一旦基类的成员函数被说明为虚函数,这7、就意味着该成员函数在派生类中可能有不同的实现。动态编联只能通过指针或引用标识对象来操作虚函数。【例2】采用动态联编重新实现【例1】的程序;将【例1】程序中的基类student类中的calfee()和disp()设置为虚函数,则程序运行后,将会得到我们希望看到的结果。本程序用了引用来标识对象。类的虚函数与多态性【例3】编写一个程序计算球、圆柱和圆锥的表面积和体积。classCircle{protec
5、”<6、态联编,即执行fn(s)时据s对象来自动确定调用相应的成员函数,而不是在编译时就确定哪个重载函数被调用。运行时能据其类型确认调用哪个函数的能力称为多态性。即动态联编。类的虚函数与多态性2、虚函数虚函数是动态联编的基础,它是引入派生概念之后用来表现基类和派生类成员函数之间的一种关系的。虚函数在基类中定义,是一种成员函数。与重载函数的意义相同,虚函数也能使一个函数具有多种不同的版本;而它的不同版本在该类的派生类中重新进行定义。(1)虚函数说明说明虚函数的方法如下:virtual<类型说明符><函数名>(<参数表>)其中,关键词virtual说明的函数称为虚函数。一旦基类的成员函数被说明为虚函数,这7、就意味着该成员函数在派生类中可能有不同的实现。动态编联只能通过指针或引用标识对象来操作虚函数。【例2】采用动态联编重新实现【例1】的程序;将【例1】程序中的基类student类中的calfee()和disp()设置为虚函数,则程序运行后,将会得到我们希望看到的结果。本程序用了引用来标识对象。类的虚函数与多态性【例3】编写一个程序计算球、圆柱和圆锥的表面积和体积。classCircle{protec
6、态联编,即执行fn(s)时据s对象来自动确定调用相应的成员函数,而不是在编译时就确定哪个重载函数被调用。运行时能据其类型确认调用哪个函数的能力称为多态性。即动态联编。类的虚函数与多态性2、虚函数虚函数是动态联编的基础,它是引入派生概念之后用来表现基类和派生类成员函数之间的一种关系的。虚函数在基类中定义,是一种成员函数。与重载函数的意义相同,虚函数也能使一个函数具有多种不同的版本;而它的不同版本在该类的派生类中重新进行定义。(1)虚函数说明说明虚函数的方法如下:virtual<类型说明符><函数名>(<参数表>)其中,关键词virtual说明的函数称为虚函数。一旦基类的成员函数被说明为虚函数,这
7、就意味着该成员函数在派生类中可能有不同的实现。动态编联只能通过指针或引用标识对象来操作虚函数。【例2】采用动态联编重新实现【例1】的程序;将【例1】程序中的基类student类中的calfee()和disp()设置为虚函数,则程序运行后,将会得到我们希望看到的结果。本程序用了引用来标识对象。类的虚函数与多态性【例3】编写一个程序计算球、圆柱和圆锥的表面积和体积。classCircle{protec
此文档下载收益归作者所有