C++写一个程序,定义抽象基类Shape,由它派生出3个派生类:Circle(圆形)、Rectangle(矩形)、Triangle(三角形),用一个函数printArea分别输出以上三者的面积,3个图形的数据在定义对象时给定
时间: 2024-12-22 12:16:35 浏览: 20
c++ 形状类Shape(派生出圆类Circle和矩形类Rectangle)
首先,我们创建一个抽象基类`Shape`,声明一个纯虚函数`getArea()`,表示所有形状都有计算面积的能力,但具体如何计算需要各自的派生类实现。然后,我们将创建三个派生类`Circle`、`Rectangle`和`Triangle`,每个类都会重写`getArea()`函数并提供具体的面积计算。
```cpp
#include <iostream>
// 抽象基类Shape
class Shape {
public:
virtual double getArea() const = 0; // 纯虚函数,用于声明所有Shape有计算面积的特性
protected:
// 具体形状的数据,这里仅做示例,实际应用中会更复杂
double data;
};
// 派生类Circle
class Circle : public Shape {
private:
double radius;
public:
Circle(double r) : radius(r) {}
double getArea() const override { return M_PI * radius * radius; }
};
// 派生类Rectangle
class Rectangle : public Shape {
private:
double width, height;
public:
Rectangle(double w, double h) : width(w), height(h) {}
double getArea() const override { return width * height; }
};
// 派生类Triangle
class Triangle : public Shape {
private:
double base, height;
public:
Triangle(double b, double h) : base(b), height(h) {}
double getArea() const override { return 0.5 * base * height; }
};
// 函数模板来打印任意形状的面积
template <typename T>
void printArea(T& shape) {
std::cout << "Area of the shape is: " << shape.getArea() << std::endl;
}
int main() {
Circle circle(5);
Rectangle rectangle(4, 6);
Triangle triangle(3, 7);
printArea(circle); // 输出Circle的面积
printArea(rectangle); // 输出Rectangle的面积
printArea(triangle); // 输出Triangle的面积
return 0;
}
```
在这个程序中,`main`函数中创建了三种形状的对象,并通过`printArea`函数模板来输出它们各自的面积。你可以根据需要修改数据初始化部分。
阅读全文