【问题描述】
编写一个程序,定义抽象基类Shape,由它派生出3个派生类:Circle(圆形),Square(正方形),Rectangle(矩形)。Square正方形派生出了cube正方体。
用虚函数分别计算几种图形面积或体积,并求用基类指针数组,使它每一个元素指向一个派生类对象。
#include <iostream>
using namespace std;
class Shape {
public:
virtual void area() {};
virtual void volume() {};
};
class Circle:public Shape {
public:
Circle() {
r=0.0;
}
void area() {
cout<<3.14159*r*r;
}
virtual void volume() {};
Circle(float r):r(r) {}
private:
float r;
};
class Square:public Shape {
public:
Square() {
a=0.0;
}
void area() {
cout<<a*a;
}
virtual void volume() {};
Square(float a):a(a) {}
protected:
float a;
};
class Rectangle:public Shape {
public:
Rectangle() {
l=0.0;
k=0.0;
}
void area() {
cout<<k*l;
}
virtual void volume() {};
Rectangle(float l,float k):l(l),k(k) {}
private:
float k,l;
};
class cube:public Square {
public:
cube(float a2):Square(a),a1(a2) {}
void volume() {
cout<<a1*a1*a1;
}
virtual void area() {};
private:
float a1;
};
int main() {
Shape *p[4];
cout<<"请依次输入圆的半径、正方形(立方体)的边长、长方体的长和宽"<<endl;
float r1,a1,l1,k1;
cin>>r1>>a1>>l1>>k1;
p[0]=new Circle(r1);
p[1]=new Square(a1);
p[2]=new Rectangle(l1,k1);
p[3]=new cube(a1);
cout<<"圆的面积为:";
p[0]->area();
cout<<endl;
cout<<"正方形的面积为:";
p[1]->area();
cout<<endl;
cout<<"正方体的体积为:";
p[3]->volume();
cout<<endl;
cout<<"长方形的面积为:";
p[2]->area();
return 0;
}