您好,欢迎访问三七文档
实用标准文案精彩文档一.实验目的及要求1.进一步熟悉类的设计、运用继承与派生机制设计派生类,合理设置数据成员和成员函数。2.掌握通过继承、虚函数、基类的指针或引用实现动态多态性的方法。3.理解并掌握具有纯虚函数的抽象类的作用,在各派生类中重新定义各纯虚函数的方法,以及此时实现的动态多态性。二.实验内容在自己的文件夹下建立一个名为exp5的工程,在该工程中做如下操作:定义一个抽象类容器类,其中定义了若干纯虚函数,实现求表面积、体积、输出等功能。由此抽象类派生出正方体、球体和圆柱体等多个派生类,根据需要定义自己的成员变量,在各个派生类中重新定义各纯虚函数,实现各自类中相应功能,各个类成员的初始化均由本类构造函数实现。(1)在主函数中,定义容器类的指针和各个派生类的对象,使指针指向不同对象处调用相同的函数能执行不同的函数代码,从而实现动态多态性。(2)定义一个顶层函数voidTopPrint(Container&r);使得主函数中调用该函数时,根据实在参数所有的类自动调用对应类的输出函数。(3)主函数中定义一个Container类对象,观察编译时的错误信息,从而得出什么结论三.实验程序及运行结果#includeiostreamusingnamespacestd;classBase{public:virtualvoidf(){cout调用Base::f()endl;}};classDerived:publicBase{public:voidf(){cout调用Derived::f()endl;}//虚函数};intmain(void){Derivedobj;//定义派生类对象Base*p=&obj;//基类指针p-f();//调用函数f()system(PAUSE);return0;}实用标准文案精彩文档2.#includeiostreamusingnamespacestd;//classBase{public:virtualvoidShow()const{cout调用Base::Show()endl;}//虚函数};classDerived:publicBase{public:voidShow()const{cout调用Derived::Show()endl;}};voidRefers(constBase&obj)//基类引用{obj.Show();//调用函数Show()}intmain(void){Baseobj1;Derivedobj2;//定义对象Refers(obj1);//调用函数Refers()Refers(obj2);system(PAUSE);return0;}实用标准文案精彩文档3.#includeiostreamusingnamespacestd;/classBase{private:intm;public:Base(inta):m(a){}virtualvoidShow()const{coutmendl;}//虚函数};classDerived:publicBase{private:intn;public:Derived(inta,intb):Base(a),n(a){}//构造函数voidShow()const{coutn,;/Base::Show();//调用基类的Show()}};intmain(void){Baseobj1(168);Derivedobj2(158,98);Base*p;p=&obj1;p-Show();p=&obj2;p-Show();实用标准文案精彩文档p-Base::Show();system(PAUSE);return0;}4.#includeiostreamusingnamespacestd;classA{public:virtualvoidShow()const{cout基类Aendl;}};classB:publicA{public:voidShow()const{cout派生类Bendl;}};intmain(void){Bobj;A*p=&obj;p-Show();system(PAUSE);return0;}实用标准文案精彩文档5.#includeiostreamusingnamespacestd;constdoublePI=3.1415926;classShape{public:virtualvoidShow()const=0;staticdoublesum;};classCircle:publicShape{private:doubleradius;public:Circle(doubler):radius(r){sum+=PI*radius*radius;}voidShow()const{cout圆形:endl;cout半径:radiusendl;cout面积:PI*radius*radiusendl;}};classRectangle:publicShape{private:doubleheight;doublewidth;public:Rectangle(doubleh,doublew):height(h),width(w){sum+=height*width;}voidShow()const{实用标准文案精彩文档cout矩形:endl;cout高:heightendl;cout宽:widthendl;cout面积:height*widthendl;}};doubleShape::sum=0;intmain(void){charflag='Y';'Shape*p;while(toupper(flag)=='Y'){cout请选择输入类别(1.圆形2.矩形);intselect;cinselect;switch(select){case1:doubler;cout输入半径:;cinr;p=newCircle(r);p-Show();deletep;break;case2:doubleh,w;cout输入高:;cinh;cout输入宽:;cinw;p=newRectangle(h,w);p-Show();//显示相关信息deletep;//释放存储空间break;default://其它情况,表示选择有误cout选择有误!endl;break;}实用标准文案精彩文档coutendl是否继续录入信息?(Y/N);cinflag;}cout总面积:Shape::sumendl;system(PAUSE);return0;}6.#includeiostreamusingnamespacestd;constdoublePI=3.1415926;constintNUM=10;classShape{public:virtualvoidShowArea()const=0;staticdoublesum;};classCircle:publicShape{private:doubleradius;实用标准文案精彩文档public:Circle(doubler):radius(r){sum+=PI*radius*radius;}voidShowArea()const{cout圆面积:PI*radius*radiusendl;}};classRectangle:publicShape{private:doubleheight;doublewidth;public:Rectangle(doubleh,doublew):height(h),width(w){sum+=height*width;}voidShowArea()const{cout矩形面积:height*widthendl;}};classSquare:publicShape{private:doublelength;public:Square(doublea):length(a){sum+=length*length;}voidShowArea()const{cout正方形面积:length*lengthendl;}};doubleShape::sum=0;intmain(void){Shape*shape[NUM];intcount=0;while(countNUM){cout请选择(1.圆形2.矩形3.正方形4.退出):;intselect;cinselect;实用标准文案精彩文档if(select==4)break;switch(select){case1:doubler;cout输入半径:;cinr;shape[count]=newCircle(r);shape[count]-ShowArea();count++;break;case2:doubleh,w;cout输入高:;cinh;cout输入宽:;cinw;shape[count]=newRectangle(h,w);shape[count]-ShowArea();count++;break;case3:doublea;cout输入边长:;cina;shape[count]=newSquare(a);shape[count]-ShowArea();count++;break;default:cout选择有误!endl;break;}}cout总面积:Shape::sumendl;for(inti=0;icount;i++)deleteshape[i];system(PAUSE);return0;}实用标准文案精彩文档五.实验总结习。
本文标题:虚函数与多态性实验
链接地址:https://www.777doc.com/doc-5682579 .html