编写重载函数max1可分别求2个整数、3个整数、2个双精度数、3个双精度数的最大值。
时间: 2024-09-19 19:06:47 浏览: 47
C++重载函数及重载函数模板的使用
5星 · 资源好评率100%
在C++中,你可以使用模板(Template)和函数重载(Function Overloading)来编写一个通用的`max1`函数,以便处理不同类型的参数并返回相应的最大值。这里是一个示例:
```cpp
#include <iostream>
#include <type_traits>
// 函数模板用于处理两个元素的最大值
template<typename T, typename std::enable_if<std::is_arithmetic<T>::value && std::is_arithmetic<decltype(std::declval<T>() + std::declval<T>())>::value>::bool_type = true>
T max1(T a, T b) {
return a > b ? a : b;
}
// 为了处理更多数量的参数,我们可以使用可变参数模板
template<typename T, typename... Args, typename std::enable_if<sizeof...(Args) <= 3 && std::is_arithmetic<T>::value && std::is_arithmetic<decltype(std::declval<T>() + std::declval<Args>())>::value>::bool_type = true>
T max1(T first, Args... args) {
return max1(first, max1(args...));
}
int main() {
int a = 5, b = 7, c = 3;
double d = 2.5, e = 3.7, f = 1.9;
std::cout << "Max of two integers: " << max1(a, b) << "\n";
std::cout << "Max of three integers: " << max1(a, b, c) << "\n";
std::cout << "Max of two doubles: " << max1(d, e) << "\n";
std::cout << "Max of three doubles: " << max1(d, e, f) << "\n";
return 0;
}
```
这个`max1`函数首先定义了处理两个元素的情况,然后使用递归可变参数模板`std::tuple`或`std::make_index_sequence`来处理任意数量的元素。`std::enable_if`确保了只有数值类型可以调用这些函数。
请注意,这个版本的`max1`函数假设所有传递的参数都是数值类型并且支持加法操作。如果要扩展到其他数据类型,可能需要进一步调整。
阅读全文