4.试写出所能想到的所有形状(包括二维的和三维的),生成一个形状层次类结构。生成的层次结构一Shape作为基类,并由此派生出TwoDimShape类和ThreeDimShape类。它们的派生类是不同形状类,定义层次结构中的每一个类,并用函数main()进行测试。
时间: 2024-04-30 18:18:53 浏览: 242
以下是形状层次类结构的代码实现:
```c++
#include <iostream>
using namespace std;
class Shape {
public:
virtual double getArea() = 0;
virtual double getVolume() = 0;
};
class TwoDimShape : public Shape {
public:
virtual double getArea() = 0;
};
class ThreeDimShape : public Shape {
public:
virtual double getArea() = 0;
virtual double getVolume() = 0;
};
class Circle : public TwoDimShape {
private:
double radius;
public:
Circle(double r) : radius(r) {}
double getArea() {
return 3.14 * radius * radius;
}
};
class Square : public TwoDimShape {
private:
double side;
public:
Square(double s) : side(s) {}
double getArea() {
return side * side;
}
};
class Rectangle : public TwoDimShape {
private:
double length, width;
public:
Rectangle(double l, double w) : length(l), width(w) {}
double getArea() {
return length * width;
}
};
class Sphere : public ThreeDimShape {
private:
double radius;
public:
Sphere(double r) : radius(r) {}
double getArea() {
return 4 * 3.14 * radius * radius;
}
double getVolume() {
return 4.0 / 3.0 * 3.14 * radius * radius * radius;
}
};
class Cylinder : public ThreeDimShape {
private:
double radius, height;
public:
Cylinder(double r, double h) : radius(r), height(h) {}
double getArea() {
return 2 * 3.14 * radius * height + 2 * 3.14 * radius * radius;
}
double getVolume() {
return 3.14 * radius * radius * height;
}
};
class Cube : public ThreeDimShape {
private:
double side;
public:
Cube(double s) : side(s) {}
double getArea() {
return 6 * side * side;
}
double getVolume() {
return side * side * side;
}
};
int main() {
Circle c(5);
Square s(4);
Rectangle r(3, 5);
Sphere sp(4);
Cylinder cy(4, 6);
Cube cu(5);
cout << "Circle area = " << c.getArea() << endl;
cout << "Square area = " << s.getArea() << endl;
cout << "Rectangle area = " << r.getArea() << endl;
cout << "Sphere area = " << sp.getArea() << ", volume = " << sp.getVolume() << endl;
cout << "Cylinder area = " << cy.getArea() << ", volume = " << cy.getVolume() << endl;
cout << "Cube area = " << cu.getArea() << ", volume = " << cu.getVolume() << endl;
return 0;
}
```
在这个实现中,我们首先定义了一个基类 Shape,其中包含了两个纯虚函数 getArea 和 getVolume,分别用于计算形状的面积和体积。然后我们定义了两个派生类 TwoDimShape 和 ThreeDimShape,用于区分二维形状和三维形状。接着我们定义了具体的形状类,包括 Circle、Square、Rectangle、Sphere、Cylinder 和 Cube,它们分别继承了 TwoDimShape 或 ThreeDimShape,并实现了相应的计算面积和体积的函数。最后在主函数中,我们创建了不同的形状对象,并调用它们的函数进行计算和输出。
阅读全文