已有抽象类shape定义如下,该类提供三个纯虚函数;显示数据成员、返回面积和返回体积。 Class Shape { virtual void showData()=0; virtual double reArea()=0; virtual double reVolume()=0; }; 以Shape为顶层基类,派生TwoDimShape(二维图形)和ThreeShape(三维图形)两个类,它们增加了有关的数据成员(自己设定,各自不少于2个),但没有成员函数的实现。 第三层派生具体的图形类。TwoDimShape类派生Circle(圆)、Elipse(椭圆)、Rectangle(矩形)和Triangle(三角形)等类。ThreeShape类派生Ball(球体)、Cylinder(圆柱体)、RectangularParallelepiped(长方体)等类。 在主函数测试中使用多态方式调用不同对象的求面积和体积等函数。
时间: 2024-01-17 12:06:18 浏览: 62
定义一个抽象类Shape
5星 · 资源好评率100%
好的,这是一个关于面向对象编程的问题。根据题目中的要求,我们需要设计一个继承结构,可以分为以下几步:
1. 定义抽象类Shape,提供三个纯虚函数,分别用于显示数据成员、返回面积和返回体积。
2. 派生TwoDimShape和ThreeShape两个类,它们分别代表二维图形和三维图形,并增加了有关的数据成员,但没有成员函数的实现。
3. 在TwoDimShape类中派生Circle、Elipse、Rectangle和Triangle等类,在ThreeShape类中派生Ball、Cylinder、RectangularParallelepiped等类,它们分别代表不同的具体图形。
4. 在主函数中,使用多态方式调用不同对象的求面积和体积等函数,通过指向基类的指针,调用派生类中的函数。
下面是一个示例代码,用于说明如何实现这个继承结构:
```
#include <iostream>
#include <cmath>
using namespace std;
class Shape {
public:
virtual void showData() = 0;
virtual double reArea() = 0;
virtual double reVolume() = 0;
};
class TwoDimShape : public Shape {
protected:
double x, y;
public:
virtual void showData() = 0;
virtual double reArea() = 0;
};
class Circle : public TwoDimShape {
public:
Circle(double _x, double _y, double _r) {
x = _x; y = _y; r = _r;
}
void showData() {
cout << "圆心坐标:" << x << "," << y << ",半径:" << r << endl;
}
double reArea() {
return M_PI * r * r;
}
private:
double r;
};
class ThreeShape : public Shape {
protected:
double x, y, z;
public:
virtual void showData() = 0;
virtual double reArea() = 0;
virtual double reVolume() = 0;
};
class Ball : public ThreeShape {
public:
Ball(double _x, double _y, double _z, double _r) {
x = _x; y = _y; z = _z; r = _r;
}
void showData() {
cout << "球心坐标:" << x << "," << y << "," << z << ",半径:" << r << endl;
}
double reArea() {
return 4 * M_PI * r * r;
}
double reVolume() {
return 4.0 / 3 * M_PI * r * r * r;
}
private:
double r;
};
int main() {
Shape *s1, *s2;
Circle c(0, 0, 1);
Ball b(0, 0, 0, 1);
s1 = &c;
s2 = &b;
s1->showData();
cout << "圆的面积:" << s1->reArea() << endl;
s2->showData();
cout << "球的表面积:" << s2->reArea() << endl;
cout << "球的体积:" << s2->reVolume() << endl;
return 0;
}
```
在这个示例代码中,我们定义了Shape作为顶层基类,派生了TwoDimShape和ThreeShape两个类。它们分别代表二维图形和三维图形,并增加了有关的数据成员,但没有成员函数的实现。在TwoDimShape类中派生了Circle等类,在ThreeShape类中派生了Ball等类,它们分别代表不同的具体图形。在主函数中,我们使用多态方式调用不同对象的求面积和体积等函数,通过指向基类的指针,调用派生类中的函数。
阅读全文