设有几何图形的派生关系如下图所示:
对平面图形可求周长和面积,对立体图形可以求体积以及底面图形的周长和底面积。
设有主函数如下:
int main()
{
Geometric_shape * gs[]={new Circle(10),new Rectangle(6,8),new Triangle(3,4,5),
new Box(6,8,3),new Cylinder(10,3),new Cone(10,3),new T_pyramid(3,4,5,3),new T_prism(3,4,5,3)};
for (int i=0;i<8;i++)
{
gs[i]->Show();
cout<<endl;
}
cout<<“平面图形:”<<endl;
for (i=0;i<3;i++)
{
cout<<“图形周长:”<<gs[i]->perimeter()<<’\t’;
cout<<“图形面积:”<<gs[i]->area()<<’\t’;
cout<<“图形体积:”<<gs[i]->volume()<<endl;
}
cout<<“立体图形:”<<endl;
for (i=3;i<8;i++)
{
cout<<“图形底周长:”<<gs[i]->perimeter()<<’\t’;
cout<<“图形底面积:”<<gs[i]->area()<<’\t’;
cout<<“图形体积 :”<<gs[i]->volume()<<endl;
}
return 0;
}
请编写各类的定义和实现代码,使给定的主函数main可以正确运行。
提示
用虚函数来实现主程序中的动态联编。即在Geometric_shape类中分别将计算面积、周长、体积等函数声明为虚函数后,就可以在该类的(直接或间接)派生类中定义与其基类虚函数原型相同的函数。这时,当用基类指针指向这些派生类的对象时,系统会自动用派生类中的同名函数来代替基类中的虚函数,从而实现运行时的多态。
#include<iostream>
#include<cmath>
#define PI 3.14
using namespace std;
class Geometric_shape //几何图形
{
public:
virtual void Show() = 0;
virtual double perimeter() {
return 0; }; //周长
virtual double area(){
return 0; }; //面积
virtual double volume(){
return 0; }; //体积
};
class Rectangle :public Geometric_shape
{
public:
Rectangle(int a, int b) :Lenth(a), Width(b){
}
virtual void Show() {
cout << "矩形长宽分别为:" << Lenth << "," << Width << endl;
}
virtual double perimeter() {
return 2 * (Lenth + Width); }
virtual double area() {
return Lenth * Width; }
virtual double volume() {
return 0; }
protected:
int Lenth, Width;