C++面向对象程序设计实验五报告代码

更新时间:2023-11-12 05:07:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

面向对象/C++程序设计实验报告

时间:第 十三 周星期 六 18:00—19:30

实验名称: 实验五 虚函数

院系:电子工程与自动化学院 座号: 成绩:

姓名: 学号: 指导老师:

课号:

一、实验目的

虚函数是重载的另外一种形式,它是一种动态的重载方式,提供了一种更为灵活的多 态性机制,它在运行时才决定如何动作。

6

对于基类和派生类中的函数重载,通过指针引起的普通成员函数调用,仅仅与指针的

类型有关,而与此刻正指向什么对象无关(如:指向基类对象的指针,当其指向派生类对象 时,只能利用它来直接访问派生类中从基类继承来的成员,不能直接访问公有派生类中自己 特定的成员)。在这种情况下,必须采用显示的方式调用派生类中的函数成员。 要实现使用对象指针时,能使指针指向不同对象时能执行不同的操作的功能,就需要 定义虚函数来实现。

虚函数是引入了派生类概念之后,用来表现基类和派生类的成员函数的关系的函数。

虚函数定义在基类中进行,在基类中需要定义为虚函数的成员函数前加关键字virtual,从 而提供了一个接口界面,在基类中的某个成员被声明为虚函数后,此虚函数就可在一个或多 个派生类中被重新定义。在重新定义时,其函数原型、包括返回类型、函数名、参数个数及 参数类型的顺序,都必须与基类中的原型完全一致。

二、实验内容

使用Visual C++ 6.0 建立一个类A,A 中定义一个虚函数,然后派生出两个类B 和C。

三、实验要求

1、分别以public 和private 的方式派生出两个类B、C;

2、在基类A 中添加一个虚函数和一个非虚函数,分别在派生类中对该虚函数进行重载; 函数和非虚函数实现的功能要求由参加实验的同学自己决定;

3、设计主程序,要求其能够分别用一般对象和指针对象实现各类中虚函数的调用和非虚 函数的对应调用;

4、对运行的结果进行分析并做出注释,对不能运行的代码注释并做出相应的原因分析。

四、思考题

1)考虑虚函数在什么情况下调用不具有虚函数的特点?

2)纯虚函数跟虚函数相比,有什么区别?有纯虚函数的类跟有虚函数的类相比,又

有什么区别? 1、程序代码:

#include class A { public: virtual void funtionA1() {

cout<<\ 基类A虚函数functionA1被访问.\}

void funtionA2() {

cout<<\ 基类A非虚函数functionA2被访问.\ } };

class B:public A { public: virtual void funtionA1() { cout<<\ 派生类B虚函数functionA1被访问.\ } void funtionB2() { cout<<\ 派生类B非虚函数functionB2被访问.\ } };

class C:private A { public: virtual void funtionA1() { cout<<\ 派生类C虚函数functionA1被访问.\ } void funtionC2() { A *pA; C c; pA=&c; pA->funtionA1(); pA->funtionA2(); cout<<\ 派生类C非虚函数functionC2被访问.\

} };

int main() { A a,*pA; B b; C c;

pA=&a;//基类A的指针pA当前指向基类对象a cout<<\基类A的指针pA当前指向基类对象a:\ pA->funtionA1();//访问基类的虚函数funtionA1() pA->funtionA2();//访问基类的非虚函数funtionA2() cout<funtionA1();//基类A的指针指向其公有派生类B对象,能访问派生类B的虚函数 pA->funtionA2();//基类A的指针指向其基类A的对象,能访问基类A的非虚函数 cout<funtionA1();//基类A的指针指向其私有派生类C对象,不能访问私有派生类C的虚函数 //pA->funtionA2();//基类A的指针指向其私有派生类A对象,不能访问私有派生类A的非虚函数 cout<<\基类A的指针不能指向其私有派生类的对象c,\ cout<<\但能以访问成员函数的方式访问基类A的虚函数和非虚函数:\ c.funtionC2(); return 0; }

2、运行结果:

本文来源:https://www.bwwdw.com/article/mhnv.html

Top