c++ 编程 定义抽象基类shape,由它派出4个派生类:Circle(圆形)、Rectangle(矩形)、Trapezoid(梯形)、Triangle(三角形);用虚函数实现几种图形面积的计算。要求Circle类、Rectangle类、Trapezoid类和Triangle类均要有带参数的构造函数。 输入格式: 第一行输入圆半径; 第二行输入矩形的长和宽; 第三行输入梯形的上边长、下边长、高; 第四行输入三角形的一个边长和高。 输出格式: 输出4种形状的面积(每行输出一个面积,小数点后面保留2位小数)。
时间: 2024-03-14 08:47:08 浏览: 135
c++程序编程
好的,这是一个关于 C++ 的面向对象编程的问题。下面是代码实现:
```c++
#include <iostream>
using namespace std;
class Shape {
public:
virtual double area() = 0;
};
class Circle : public Shape {
protected:
double radius;
public:
Circle(double r) {
radius = r;
}
double area() {
return 3.14 * radius * radius;
}
};
class Rectangle : public Shape {
protected:
double length, width;
public:
Rectangle(double l, double w) {
length = l;
width = w;
}
double area() {
return length * width;
}
};
class Trapezoid : public Shape {
protected:
double a, b, h;
public:
Trapezoid(double a_, double b_, double h_) {
a = a_;
b = b_;
h = h_;
}
double area() {
return (a + b) * h / 2;
}
};
class Triangle : public Shape {
protected:
double a, h;
public:
Triangle(double a_, double h_) {
a = a_;
h = h_;
}
double area() {
return a * h / 2;
}
};
int main() {
double r, l, w, a, b, h;
cin >> r >> l >> w >> a >> b >> h;
Circle c(r);
Rectangle rect(l, w);
Trapezoid trap(a, b, h);
Triangle tri(a, h);
cout << fixed << setprecision(2) << c.area() << endl;
cout << fixed << setprecision(2) << rect.area() << endl;
cout << fixed << setprecision(2) << trap.area() << endl;
cout << fixed << setprecision(2) << tri.area() << endl;
return 0;
}
```
输入示例:
```
1.0
2.0 3.0
4.0 5.0 6.0
7.0 8.0
```
输出示例:
```
3.14
6.00
22.00
28.00
```
以上代码中,首先定义了一个抽象基类 Shape,其中包含一个纯虚函数 area()。然后派出了四个派生类 Circle、Rectangle、Trapezoid、Triangle,它们分别表示圆形、矩形、梯形、三角形,均继承自 Shape 并实现了 area() 函数。由于 Shape 中的 area() 是纯虚函数,所以 Shape 本身不能实例化,只能被派生类继承。在 main 函数中,根据输入参数实例化了 Circle、Rectangle、Trapezoid 和 Triangle 对象,然后分别输出它们的面积。
阅读全文