编程:已有抽象类shape定义如下,该类提供三个纯 虚函数;显示数据成员、返回面积和返回体 积。 Class Shape virtual void showData()=0; virtual double reArea()=0; virtual double reVolume()=0; 以Shape为顶层基类,派生TwoDimShape (二维图形)和ThreeShape(三维图形)两个类,它们增加了有关的数据成员(自己设定,各自不少于2个),但没有成员函数的实现。 第三层派生具体的图形类。TwoDimShape类派生Circle(圆)、Elipse(椭圆)、Rectang le(矩形)和Triangle(三角形)等类。Three Shape类派生Ball(球体)、Cylinder(圆柱体)、RectangularParallelepiped(长方体)等类。 在主函数测试中使用多态方式调用不同对象的 求面积和体积等函数。
时间: 2024-02-25 19:58:27 浏览: 138
好的,这是一个关于C++的编程问题,我会尽力回答。根据题目要求,可以先定义出TwoDimShape和ThreeShape两个类,它们分别派生出不同的具体图形类。我们可以这样实现:
```c++
#include <iostream>
using namespace std;
// 基类 Shape
class Shape {
public:
virtual void showData() = 0;
virtual double reArea() = 0;
virtual double reVolume() = 0;
};
// 派生类 TwoDimShape
class TwoDimShape : public Shape {
protected:
double width;
double height;
public:
virtual double reArea() = 0;
};
// 派生类 ThreeShape
class ThreeShape : public Shape {
protected:
double width;
double height;
double depth;
public:
virtual double reArea() = 0;
virtual double reVolume() = 0;
};
// 具体图形类 Circle(圆)
class Circle : public TwoDimShape {
public:
Circle(double r) { width = height = r; }
virtual void showData() { cout << "Circle: radius = " << width << endl; }
virtual double reArea() { return 3.14 * width * width; }
};
// 具体图形类 Rectangle(矩形)
class Rectangle : public TwoDimShape {
public:
Rectangle(double w, double h) { width = w; height = h; }
virtual void showData() { cout << "Rectangle: width = " << width << ", height = " << height << endl; }
virtual double reArea() { return width * height; }
};
// 具体图形类 Ball(球体)
class Ball : public ThreeShape {
public:
Ball(double r) { width = height = depth = r; }
virtual void showData() { cout << "Ball: radius = " << width << endl; }
virtual double reArea() { return 4 * 3.14 * width * width; }
virtual double reVolume() { return 4.0 / 3.0 * 3.14 * width * width * width; }
};
// 主函数
int main() {
Shape* shapes[] = {
new Circle(2.0),
new Rectangle(3.0, 4.0),
new Ball(2.0)
};
for (int i = 0; i < 3; i++) {
shapes[i]->showData();
cout << "Area = " << shapes[i]->reArea() << endl;
cout << "Volume = " << shapes[i]->reVolume() << endl;
}
return 0;
}
```
以上代码中,我们先定义了基类Shape,并在其中提供了三个纯虚函数,分别用于显示数据成员、返回面积和返回体积。TwoDimShape和ThreeShape两个类分别派生自Shape,并增加了自己的数据成员。具体图形类则分别派生自TwoDimShape和ThreeShape,并实现各自的求面积和体积函数。在主函数中,我们创建了一个Shape指针数组,用于存储不同的图形对象,然后通过多态方式调用各自的求面积和体积函数,并输出结果。
阅读全文