《虚函数与多态性实验》由会员分享,可在线阅读,更多相关《虚函数与多态性实验(10页珍藏版)》请在金锄头文库上搜索。
1、一实验目的及要求1进一步熟悉类的设计、运用继承与派生机制设计派生类,合理设置数据成员和成员函数。2掌握通过继承、虚函数、基类的指针或引用实现动态多态性的方法。3理解并掌握具有纯虚函数的抽象类的作用,在各派生类中重新定义各纯虚函数的方法,以及此时实现的动态多态性。二实验内容在自己的文件夹下建立一个名为 exp5 的工程,在该工程中做如下操作:定义一个抽象类容器类,其中定义了若干纯虚函数,实现求表面积、体积、输出等功能。由此抽象类派生出正方体、球体和圆柱体等多个派生类,根据需要定义自己的成员变量,在各个派生类中重新定义各纯虚函数,实现各自类中相应功能,各个类成员的初始化均由本类构造函数实现。(1)
2、在主函数中,定义容器类的指针和各个派生类的对象,使指针指向不同对象处调用相同的函数能执行不同的函数代码,从而实现动态多态性。(2)定义一个顶层函数 void TopPrint(Container 使得主函数中调用该函数时,根据实在参数所有的类自动调用对应类的输出函数。(3)主函数中定义一个 Container 类对象,观察编译时的错误信息,从而得出什么结论三实验程序及运行结果#include using namespace std;class Basepublic:virtual void f() cout f(); / 调用函数 f()system(PAUSE); return 0; 2.#
3、include using namespace std; /class Basepublic:virtual void Show() const cout using namespace std; /class Baseprivate:int m;public:Base(int a): m(a) virtual void Show() const cout Show();p = p-Show();p-Base:Show();system(PAUSE); return 0; 4.#include using namespace std;class Apublic:virtual void Sho
4、w() const cout Show();system(PAUSE);return 0;5.#include using namespace std;const double PI = 3.1415926;class Shapepublic:virtual void Show() const = 0;static double sum;class Circle: public Shapeprivate:double radius;public:Circle(double r): radius(r) sum += PI * radius * radius; void Show() const
5、cout select;switch (select)case 1:double r;cout r;p = new Circle(r);p-Show();delete p;break;case 2:double h, w;cout h;cout w;p = new Rectangle(h, w);p-Show(); / 显示相关信息delete p; / 释放存储空间break;default: / 其它情况 , 表示选择有误cout flag;cout using namespace std;const double PI = 3.1415926;const int NUM = 10;cla
6、ss Shapepublic:virtual void ShowArea() const = 0;static double sum;class Circle: public Shapeprivate:double radius;public:Circle(double r): radius(r) sum += PI * radius * radius; void ShowArea() const cout select;if (select = 4) break;switch (select)case 1:double r;cout r;shapecount = new Circle(r);
7、shapecount-ShowArea();count+;break;case 2:double h, w;cout h;cout w;shapecount = new Rectangle(h, w);shapecount-ShowArea();count+;break;case 3:double a;cout a;shapecount = new Square(a);shapecount-ShowArea();count+;break;default:cout 选择有误! endl;break;cout 总面积: Shape:sum endl;for (int i = 0; i count; i+) delete shapei;system(PAUSE); return 0; 5实验总结通过本次试验 我更深刻的理解了某些语句如何使用及结构体的优点 也能更加熟练的编写简单的程序了 我深知实践要比书本更加重要 今后还要多练习 在实践中学习。