欢迎来到天天文库
浏览记录
ID:35531575
大小:63.53 KB
页数:5页
时间:2019-03-25
《c实验报告(虚基类)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验五Shape虚基类一、实验目的1.掌握虚基类的定义、使用2.理解使用虚函数和继承类实现多态性二、实验环境Windows+VC++6.0。三、实验内容及要求定义抽象基类Shape,有它派生出三个类:Circle、RectangleaTriangle,用函数ShowArea分别显示各种图形的面积,最后还要显示所有的图形面积。要求用基类指针数组,使他的每一个元素指向一个派生类对象。四、实验步骤(1)定义一个虚基类Shape,在ShowArea函数声明前冠以virtual使其成为虚函数,并且能够在派
2、生类中重定义。〃形状类ShapeclassShape{public:virtualdoubleShowArea()cons1=0:};(2)定义三个派生类Circle、Rectangle、Triangle,并公有继承Shape基类。〃圆形CircleclassCirclc:publicShape{private:double:radius;//半径public:Circle(doubler):radius(r){}doubleShowArea()const//构造函数〃求圆形面积的函数retur
3、nPI*radius*radius;}};//矩形类RectangleclassRectangle:publicShape{亠private:doublehcigth;//高doublewidth;//宽public:Rectangle(doubleh,doublew):heigth(h),width(w){}//构造函数doubleShowAreaOconst//求矩形面积的函数{returnheigth^width;}};〃三角形类TriangleclassTriangle:publicSh
4、ape{private:doublea,b,c;//三角形三条边public:Triangle(doublex,doubley,doublez):a(x),b(y),c(z){}//构造函数doubleShowAreaOconst//求三角形面积函数{intp=(a+b+c)/2;returnsqrt(p*(p-a)*(p-b)*(p-c));}}(3)在主函数中分别调用三个派生类的ShowArea函数,求出各个形状的面积。intmainO{CircleA(0.5);cout<<"圆形面积y:,
5、,«A.ShowArea()<ShowArea()访问的是对象A的
6、成员函数。doublearca=0.0;Shape*讥3]={&A,&B,&C};//基类指针数组for(inti=0;i<3;i++){area=area+p[i]->ShowArea();//面积相加}cout«"总面积y:,,<
7、,它是一个可以建立对象的具体的类。抽象类是不能定义对象的。如下例:classShape{public:virtualdoubleShowAreaOconst二0;};2.如果派生类重写了基类的虚函数,那么编译器对应的操作为将指向虚函数表的指针_vfptr指向的函数指针数组中相应的虚函数入口地址改变为当前派生类实现的函数入口地址;基类指针指向派牛类后,实际上指向的是从基类派生到派生类那段成员的首地址(存放_vfptr,如果定义有虚函数),基类指针在调用虚函数的额时候,是通过查该_vfptr地址指向
8、的函数指针数组来查找函数入口地址。所以,如果派生类重写了虚函数,那么以上查找的虚函数的入口地址将是派生类重写的函数的入口地址。p[i]->ShowArca();//访问派生类重写ShowArca函数的入口地址i六、实验结果与总结实验总结:抽象基类与普通基类不同,他平不是现实存在的对象,它可以没有任何物理上的或其他实际意义方面的含义,例如Shape类,只有一个成员函数,没有数据成员。它既不代表点,也不代表实验结果如下:■J乍:学习XTEXTXvirtuaLclassXDebugXmain.exe
此文档下载收益归作者所有