实验八虚函数及应用

实验八虚函数及应用

ID:35342209

大小:70.04 KB

页数:9页

时间:2019-03-23

实验八虚函数及应用_第1页
实验八虚函数及应用_第2页
实验八虚函数及应用_第3页
实验八虚函数及应用_第4页
实验八虚函数及应用_第5页
资源描述:

《实验八虚函数及应用》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、实验八虚函数及应用—、实验目的1.理解虚函数与运行时(动态)多态性之间的关系,掌握虚函数的定义及应用;2.理解纯虚函数与抽彖类的概念,掌握抽彖类的定义及应用;3.理解虚析构函数的概念及作用。二、实验学时课内实验:2课时课外练习:2课时三本实验涉及的新知识㈠虚函数与动态多态性在C++屮,如果将基类与派生类的同名成员函数定义为虚函数,就可以定义一个基类指针,当基类指针指向基类对象时访问基类的成员函数,当基类指针指向派生类对象时访问派生类的成员函数,实现在运行吋根据基类指针所指向的对象动态调用成员函数,实现动

2、态多态性。换句话说,虚函数与派生类相结合,使C++能支持运行时(动态)多态性,实现在基类中定义派生类所拥有的通用“接口”,而在派生类中定义具体的实现方法,即“一个接口,多种方法”。㈡虚函数的定义1.在基类中定义在定义函数的前面加上“virtual”。即:virtual返回类型函数名(参数表)2.在派生类中定义函数的返回类型、函数名、参数的个数、参数类型及顺序必须与基类中的原型完全相同。3.说明:(1)在派生类中定义虚函数时,可用“virtual”也可不用"virtual"(最好都使用)。(2)虚函数在派

3、生类屮重新定义时,其原型必须与基类屮相同。(3)必须用基类指针访问虚函数才能实现运行时(动态)多态性;当用普通成员函数的调用方法(即用圆点运算符)调用虚函数时,为静态调用;(4)屜函数在自身类屮必须声明为成员函数(不能为友元函数或静态成员函数),但在另一个类中可以声明为友元函数。(5)虚函数可以公有继承多次,其虚函数的特性不变。(6)构造函数不能定义为虚函数,但析构函数可以定义为虚函数。(7)虚函数与重载函数的关系①普通函数重载是通过参数类型或参数的个数不同实现的;重载一个虚函数时,其函数原型(返冋类型

4、、参数个数、类型及顺序)完全相同。②当重载的虚函数只有返回类型不同时,系统将给出错误信息;如果定义的虚函数只有函数名相同,而参数个数或类型不同时,则为普通函数重载。㈢纯虚函数与抽象类1.纯虚函数定义格式:virtual返回类型func_name(参数表)=0;[{……}]1.抽象类(1)抽象类的概念当一个类中定义了一个或多个纯虚函数,则该类称为抽象类。(2)说明:①抽象类中包含没有功能的纯虚函数,用来提供派生类的公共接口函数。因此,抽象类只能作为其它类的基类,不能定义其对象。②可以定义抽象类的指针或引用

5、,用于指向派生类而实现多态性。③如果在派生类屮未重新定义纯虚函数,则派生类只是继承了基类的纯虚函数,这时,派生类仍是抽象类。㈣虚析构函数1.虚析构函数的定义在析构函数名前加上“virtual”。即:virtual~类名(void){……}2.说明当类中需要显式定义析构函数,而在基类中定义了虚函数吋,应将析构函数定义为虚析构函数,以实现动态调用析构函数。四、实验内容㈠验证及认知实验按要求调试下列程序,并冋答相关问题。程序1(exp_801.cpp)#ineludeclassBase

6、{inta,b;public:Base(intxjnty){a=x;b=y;)voidshow(){cout«"a=',«a«Hb=H«b;}};classDerived:publicBase{intc;public:Derived(intx,inty,intz):Base(x,y){c=z;}voidshow(){Base::show();cout«Hc=n«c;}};voidmain(){Basemb(50,50),*mp;Derivedmd(10,20,30);mp二&mb;mp->show();

7、cout«endl;mp=&md;mp・>show();cout«endl;((Derived*)mp)->show();cout«endl;}问题:(1)编译运行程序的输出结果为:(2)根据程序的输出结果可知:执行“mp=&mb;mp->show();”时,调用的是类的show();执行“mp=&md;mp->show();”时,调用的是类的show();执行“((De「ived*)mp)・>show();”时,调用的是类的show():其中“((Derived*)mp)”是将Base类“mp”指针强

8、制转换为类的指针。(3)在基类“Base”中的成员函数“voidshow()"改为uvirtualvoidshow()",再重新编译运行程序,输出结果为:(4)当执行“mp二&md;mp->show();”时,调用的是类的show();函数“show。”称为,实现了多态性。程序2(exp_802.cpp)#includeclassBase{public:virtualvoidshow(){cout«"Base该类无计

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

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

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