1.设计抽象基类Shape类 2.由Shape类派生出Circle圆类,Rectangle矩形类,Triangle三角形类 3.用函数printArea分别实现圆类、矩形类、三角形类的面积 4.用基类Shape类的指针输出圆类、矩形类、三角形类的面积
时间: 2024-03-23 12:43:49 浏览: 55
设计一个抽象类图形类,在该类中包含有至少两个抽象方法求周长和求面积,分别定义圆形类、长方形类、正方形类、三角形类来继承图形类,并实现上述两个方法
5星 · 资源好评率100%
好的,让我们来逐步解决这个问题。
首先,我们需要定义一个抽象基类 `Shape` 类,其中包含一个纯虚函数 `virtual double getArea() = 0;`,用于计算图形的面积。定义如下:
```c++
class Shape {
public:
virtual double getArea() = 0;
};
```
接下来,我们需要从 `Shape` 类派生出三个具体类:`Circle`、`Rectangle` 和 `Triangle`。定义如下:
```c++
class Circle : public Shape {
private:
double radius;
public:
Circle(double r) : radius(r) {}
double getArea() override {
return 3.14159 * radius * radius;
}
};
class Rectangle : public Shape {
private:
double width, height;
public:
Rectangle(double w, double h) : width(w), height(h) {}
double getArea() override {
return width * height;
}
};
class Triangle : public Shape {
private:
double base, height;
public:
Triangle(double b, double h) : base(b), height(h) {}
double getArea() override {
return 0.5 * base * height;
}
};
```
注意,在每个具体类中,我们必须实现 `getArea()` 函数,用于计算该类型图形的面积。
接下来,我们需要编写一个名为 `printArea` 的函数,用于打印给定图形的面积。我们可以将函数定义为一个模板函数,如下所示:
```c++
template<typename T>
void printArea(T& shape) {
std::cout << "Area: " << shape.getArea() << std::endl;
}
```
最后,我们可以使用基类 `Shape` 的指针来输出不同类型图形的面积,如下所示:
```c++
int main() {
Circle c(5);
Rectangle r(3, 4);
Triangle t(2, 6);
Shape* shapes[] = {&c, &r, &t};
for (auto shape : shapes) {
printArea(*shape);
}
return 0;
}
```
在上述代码中,我们首先创建了三个不同类型的图形(圆、矩形、三角形),然后将它们存储在 `Shape` 指针数组中。最后,我们使用 `printArea` 函数分别输出每个图形的面积。
希望这个解答能够帮助到你!
阅读全文