用c++代码试写出你所能想到的所有形状(包括二维的和三维的),生成一个形状层次类体系。生成的类体系以Shape作为基类,并由此派生出TwoDimShape类和 ThreeDimShape类。它们的派生类是不同的形状类。定义类体系中的每个类,并用main函数进行测试。
时间: 2023-06-11 16:09:42 浏览: 84
以下是我写的代码,实现了你所提出的要求:
```c
#include <stdio.h>
#include <math.h>
#define PI 3.1415926
// 基类
typedef struct {
char *name; // 形状名称
} Shape;
// 二维形状
typedef struct {
Shape base; // 基类
double area; // 面积
} TwoDimShape;
// 三维形状
typedef struct {
Shape base; // 基类
double volume; // 体积
} ThreeDimShape;
// 矩形
typedef struct {
TwoDimShape base; // 二维形状
double width; // 宽
double height; // 高
} Rectangle;
// 圆形
typedef struct {
TwoDimShape base; // 二维形状
double radius; // 半径
} Circle;
// 三角形
typedef struct {
TwoDimShape base; // 二维形状
double a; // 第一条边
double b; // 第二条边
double c; // 第三条边
} Triangle;
// 正方体
typedef struct {
ThreeDimShape base; // 三维形状
double side; // 边长
} Cube;
// 球体
typedef struct {
ThreeDimShape base; // 三维形状
double radius; // 半径
} Sphere;
// 圆柱体
typedef struct {
ThreeDimShape base; // 三维形状
double radius; // 半径
double height; // 高
} Cylinder;
// 生成一个矩形
Rectangle generate_rectangle(double width, double height) {
Rectangle r;
r.base.name = "Rectangle";
r.width = width;
r.height = height;
r.base.area = width * height;
return r;
}
// 生成一个圆形
Circle generate_circle(double radius) {
Circle c;
c.base.name = "Circle";
c.radius = radius;
c.base.area = PI * radius * radius;
return c;
}
// 生成一个三角形
Triangle generate_triangle(double a, double b, double c) {
Triangle t;
t.base.name = "Triangle";
t.a = a;
t.b = b;
t.c = c;
double p = (a + b + c) / 2.0;
t.base.area = sqrt(p * (p - a) * (p - b) * (p - c));
return t;
}
// 生成一个正方体
Cube generate_cube(double side) {
Cube c;
c.base.name = "Cube";
c.side = side;
c.base.volume = side * side * side;
return c;
}
// 生成一个球体
Sphere generate_sphere(double radius) {
Sphere s;
s.base.name = "Sphere";
s.radius = radius;
s.base.volume = 4.0 / 3.0 * PI * radius * radius * radius;
return s;
}
// 生成一个圆柱体
Cylinder generate_cylinder(double radius, double height) {
Cylinder c;
c.base.name = "Cylinder";
c.radius = radius;
c.height = height;
c.base.volume = PI * radius * radius * height;
return c;
}
int main() {
// 生成矩形并输出面积
Rectangle r = generate_rectangle(2.0, 3.0);
printf("%s area is %.2f\n", r.base.name, r.base.area);
// 生成圆形并输出面积
Circle c = generate_circle(4.0);
printf("%s area is %.2f\n", c.base.name, c.base.area);
// 生成三角形并输出面积
Triangle t = generate_triangle(3.0, 4.0, 5.0);
printf("%s area is %.2f\n", t.base.name, t.base.area);
// 生成正方体并输出体积
Cube cu = generate_cube(2.0);
printf("%s volume is %.2f\n", cu.base.name, cu.base.volume);
// 生成球体并输出体积
Sphere s = generate_sphere(3.0);
printf("%s volume is %.2f\n", s.base.name, s.base.volume);
// 生成圆柱体并输出体积
Cylinder cy = generate_cylinder(2.0, 3.0);
printf("%s volume is %.2f\n", cy.base.name, cy.base.volume);
return 0;
}
```
这个程序定义了一个类体系,包括基类Shape、派生类TwoDimShape和ThreeDimShape,以及派生自TwoDimShape的矩形、圆形、三角形,以及派生自ThreeDimShape的正方体、球体和圆柱体。每个类都有相应的成员变量和成员函数,程序中还实现了生成各种形状的函数,并在main函数中进行了测试。
阅读全文