用c++写一个函数,函数接受两个参数:形状类型(std::string,默认值为“circle”)和相关的尺寸(double,默认值为1.0)
时间: 2024-10-17 08:15:59 浏览: 16
C++ 11 std::function和std::bind使用详解
在 C++ 中,你可以编写一个模板函数来处理不同类型的形状及其尺寸。这里是一个简单的例子,它创建了一个通用的 `draw_shape` 函数,可以根据传入的字符串参数判断是圆形还是默认尺寸:
```cpp
#include <iostream>
#include <string>
// 定义一个抽象的 Shape 类
class Shape {
public:
virtual double get_area() const = 0; // 抽象方法,用于计算面积
};
// 具体的形状类,比如 Circle
class Circle : public Shape {
private:
double radius;
public:
Circle(double r = 1.0) : radius(r) {}
double get_area() const override { return M_PI * radius * radius; }
};
// 模板函数 draw_shape
template <typename T, typename D = double>
void draw_shape(const std::string& shape_type, D size) {
if (shape_type == "circle") {
Circle circle(size);
std::cout << "Drawing a Circle with radius " << circle.get_area() << "\n";
} else {
std::cout << "Unsupported shape type: " << shape_type << "\n";
}
}
int main() {
draw_shape("circle", 2.5); // 默认圆的半径为1.0
draw_shape<Circle>(4.0); // 显式指定Circle类型
draw_shape("triangle", 5.0); // 不支持的形状类型会显示错误消息
return 0;
}
```
在这个例子中,`draw_shape` 函数接受一个字符串参数表示形状类型,并可以接受一个额外的双精度浮点数参数。如果传入的是 `"circle"`,则实例化一个 `Circle` 对象并计算其面积;如果是其他类型,函数将打印一条错误消息。
阅读全文