用C++定义一个描述平面图形的基类 Plane 定义一个描述柱体的基类 Body 从虚基类 Plane 派生出具体类(如长方形类 Rectangle、圆形类 Circle 和三角形类triangle,由Rectangle派生出正方形Square类),根据实际情况,覆盖基类 Plane 的求面积函数 area() 和Body的求体积函数volume()。从具体triangle类、square及Circle和Body类派生出Triangularprism(三棱柱), quadrangular(四棱柱), circularcolumn(圆柱)类
时间: 2024-03-27 15:41:08 浏览: 90
好的,下面是代码实现:
```c++
#include <iostream>
#include <cmath>
using namespace std;
// 定义平面图形的基类
class Plane {
public:
virtual double area() const = 0; // 求面积的纯虚函数
};
// 定义柱体的基类
class Body {
public:
virtual double volume() const = 0; // 求体积的纯虚函数
};
// 从虚基类 Plane 派生出具体类 Rectangle(长方形)
class Rectangle : virtual public Plane {
protected:
double width; // 宽
double height; // 高
public:
Rectangle(double w, double h) : width(w), height(h) {}
double area() const override { // 覆盖基类求面积的函数
return width * height;
}
};
// 从 Rectangle 派生出具体类 Square(正方形)
class Square : public Rectangle {
public:
Square(double s) : Rectangle(s, s) {} // 正方形的宽和高相等
};
// 从虚基类 Plane 派生出具体类 Circle(圆形)
class Circle : virtual public Plane {
protected:
double radius; // 半径
public:
Circle(double r) : radius(r) {}
double area() const override { // 覆盖基类求面积的函数
return M_PI * radius * radius;
}
};
// 从虚基类 Plane 派生出具体类 Triangle(三角形)
class Triangle : virtual public Plane {
protected:
double a; // 边长1
double b; // 边长2
double c; // 边长3
public:
Triangle(double x, double y, double z) : a(x), b(y), c(z) {}
double area() const override { // 覆盖基类求面积的函数
double p = (a + b + c) / 2;
return sqrt(p * (p - a) * (p - b) * (p - c));
}
};
// 从具体类 Triangle、Square 和 Circle 派生出 Triangularprism(三棱柱)、Quadrangular(四棱柱)和 Circularcolumn(圆柱)类
class Triangularprism : public Triangle, public Body {
protected:
double height; // 高
public:
Triangularprism(double x, double y, double z, double h) : Triangle(x, y, z), height(h) {}
double volume() const override { // 覆盖基类求体积的函数
return Triangle::area() * height;
}
};
class Quadrangular : public Rectangle, public Body {
protected:
double height; // 高
public:
Quadrangular(double w, double h, double d) : Rectangle(w, h), height(d) {}
double volume() const override { // 覆盖基类求体积的函数
return Rectangle::area() * height;
}
};
class Circularcolumn : public Circle, public Body {
protected:
double height; // 高
public:
Circularcolumn(double r, double h) : Circle(r), height(h) {}
double volume() const override { // 覆盖基类求体积的函数
return Circle::area() * height;
}
};
int main() {
// 构造一个长方形
Rectangle r(3, 4);
cout << "长方形的面积为:" << r.area() << endl;
// 构造一个正方形
Square s(5);
cout << "正方形的面积为:" << s.area() << endl;
// 构造一个圆形
Circle c(2);
cout << "圆形的面积为:" << c.area() << endl;
// 构造一个三角形
Triangle t(3, 4, 5);
cout << "三角形的面积为:" << t.area() << endl;
// 构造一个三棱柱
Triangularprism tp(3, 4, 5, 6);
cout << "三棱柱的体积为:" << tp.volume() << endl;
// 构造一个四棱柱
Quadrangular q(3, 4, 5);
cout << "四棱柱的体积为:" << q.volume() << endl;
// 构造一个圆柱
Circularcolumn cc(2, 6);
cout << "圆柱的体积为:" << cc.volume() << endl;
return 0;
}
```
输出结果为:
```
长方形的面积为:12
正方形的面积为:25
圆形的面积为:12.5664
三角形的面积为:6
三棱柱的体积为:36
四棱柱的体积为:60
圆柱的体积为:75.3982
```
阅读全文