设计一个图形类(Shape),由它派生出5个派生类:三角形类(Triangle)、正方形类(Square)、圆形类(Circle)、矩形类(Rectangle)、梯形类(triangle)类,利用虚函数计算图形面积,用一个函数printArea分别输出以上5者的面积。
时间: 2024-01-07 19:03:12 浏览: 81
设计一个抽象类图形类,在该类中包含有至少两个抽象方法求周长和求面积,分别定义圆形类、长方形类、正方形类、三角形类来继承图形类,并实现上述两个方法
5星 · 资源好评率100%
好的,以下是实现该功能的C++代码:
```c++
#include <iostream>
using namespace std;
class Shape {
public:
virtual double getArea() { return 0; }
};
class Triangle : public Shape {
public:
Triangle(double b, double h) : base(b), height(h) {}
double getArea() { return 0.5 * base * height; }
private:
double base;
double height;
};
class Square : public Shape {
public:
Square(double s) : side(s) {}
double getArea() { return side * side; }
private:
double side;
};
class Circle : public Shape {
public:
Circle(double r) : radius(r) {}
double getArea() { return 3.14 * radius * radius; }
private:
double radius;
};
class Rectangle : public Shape {
public:
Rectangle(double l, double w) : length(l), width(w) {}
double getArea() { return length * width; }
private:
double length;
double width;
};
class Trapezoid : public Shape {
public:
Trapezoid(double b1, double b2, double h) : base1(b1), base2(b2), height(h) {}
double getArea() { return 0.5 * (base1 + base2) * height; }
private:
double base1;
double base2;
double height;
};
void printArea(Shape& shape) {
cout << "The area is: " << shape.getArea() << endl;
}
int main() {
Triangle t(3, 4);
Square s(5);
Circle c(2);
Rectangle r(6, 7);
Trapezoid tr(2, 4, 3);
printArea(t);
printArea(s);
printArea(c);
printArea(r);
printArea(tr);
return 0;
}
```
在上面的代码中,我们定义了一个基类 Shape,里面有一个虚函数 getArea(),用于计算图形的面积。然后我们派生出了 5 个类,分别是 Triangle、Square、Circle、Rectangle 和 Trapezoid,它们都重写了 getArea() 函数。
最后我们定义了一个函数 printArea,它以一个 Shape 对象为参数,并输出该图形的面积。在 main 函数中,我们创建了 5 个不同的图形对象,并分别调用了 printArea 函数,输出了它们的面积。
阅读全文