用c++声明一个shape基类,有计算面积arae()成员函数,由此派生出正方形类(Square)、直角三角形类(Triangle)、圆类(Circle),它们都有arae()成员函数。利用虚函数编程计算正方形、直角三角形和圆的面积之和。
时间: 2024-10-17 19:05:59 浏览: 25
详解C++中基类与派生类的转换以及虚基类
首先,让我们创建一个名为Shape的基类,它包含一个纯虚函数area(),表示所有形状的共同特性。然后,我们将为此基类创建三个派生类:Square(正方形)、Triangle(直角三角形)和Circle(圆形)。这三个类都将重写area()函数来提供各自的面积计算。最后,在主函数中,我们将创建这些派生类的对象,并通过虚函数计算总面积。
```cpp
#include <iostream>
// Shape基类
class Shape {
protected:
virtual double area() const = 0; // 纯虚函数,表示需要重写
public:
// 公共方法,计算所有形状的面积总和
static double calculateTotalArea(std::vector<std::shared_ptr<Shape>>& shapes) {
double totalArea = 0;
for (const auto& shape : shapes) {
totalArea += shape->area();
}
return totalArea;
}
};
// 正方形类
class Square : public Shape {
private:
double sideLength;
public:
Square(double sideLength) : sideLength(sideLength) {}
double area() const override { return sideLength * sideLength; }
};
// 直角三角形类
class Triangle : public Shape {
private:
double base, height;
public:
Triangle(double base, double height) : base(base), height(height) {}
double area() const override { return 0.5 * base * height; }
};
// 圆类
class Circle : public Shape {
private:
double radius;
public:
Circle(double radius) : radius(radius) {}
double area() const override { return M_PI * radius * radius; } // 使用π来计算圆形面积
};
int main() {
// 创建并存储派生类的对象
std::vector<std::shared_ptr<Shape>> shapes;
shapes.push_back(std::make_shared<Square>(4)); // 正方形边长为4
shapes.push_back(std::make_shared<Triangle>(3, 4)); // 三角形底边为3,高为4
shapes.push_back(std::make_shared<Circle>(5)); // 半径为5的圆
// 计算并打印面积总和
double totalArea = Shape::calculateTotalArea(shapes);
std::cout << "The total area of all shapes is: " << totalArea << std::endl;
return 0;
}
```
在这个例子中,`calculateTotalArea()`方法作为虚函数实现了通用计算各个形状面积的功能,无需关心具体的形状类型。当你运行这个程序时,将输出所有形状的总面积。
阅读全文