声明抽象基类Shape,由它派生出5个派生类;Circle(圆形)、Square(正方形)、Rectangle(矩形)、Trapezoid(梯形)、Triangle(三角形),分别计算几种图形的面积,并输出每种图形的面积、所有图形面积的总和。。C++
时间: 2023-07-10 09:31:16 浏览: 41
好的,这是一个关于面积计算的问题,我可以为您提供一个C++的实现代码,如下所示:
```c++
#include <iostream>
#include <vector>
#include <memory>
using namespace std;
class Shape {
public:
virtual ~Shape() {}
virtual double area() const = 0;
};
class Circle : public Shape {
public:
Circle(double r) : r_(r) {}
virtual double area() const override {
return 3.14 * r_ * r_;
}
private:
double r_;
};
class Square : public Shape {
public:
Square(double a) : a_(a) {}
virtual double area() const override {
return a_ * a_;
}
private:
double a_;
};
class Rectangle : public Shape {
public:
Rectangle(double a, double b) : a_(a), b_(b) {}
virtual double area() const override {
return a_ * b_;
}
private:
double a_;
double b_;
};
class Trapezoid : public Shape {
public:
Trapezoid(double a, double b, double h) : a_(a), b_(b), h_(h) {}
virtual double area() const override {
return (a_ + b_) * h_ / 2;
}
private:
double a_;
double b_;
double h_;
};
class Triangle : public Shape {
public:
Triangle(double a, double h) : a_(a), h_(h) {}
virtual double area() const override {
return a_ * h_ / 2;
}
private:
double a_;
double h_;
};
int main() {
vector<shared_ptr<Shape>> shapes;
shapes.push_back(make_shared<Circle>(3));
shapes.push_back(make_shared<Square>(4));
shapes.push_back(make_shared<Rectangle>(3, 5));
shapes.push_back(make_shared<Trapezoid>(2, 4, 3));
shapes.push_back(make_shared<Triangle>(4, 3));
double total_area = 0;
for (const auto& shape : shapes) {
double area = shape->area();
cout << "面积为:" << area << endl;
total_area += area;
}
cout << "所有图形面积的总和为:" << total_area << endl;
return 0;
}
```
运行代码后,控制台上会输出各种图形的面积以及它们的总面积。希望这个代码可以帮到您!