c++编写重载函数max_value,可分别求取两个整数,三个整数,两个浮点数,一个浮点数一个整数的最大值。
时间: 2024-10-16 07:19:13 浏览: 28
在 C++ 中,你可以使用模板和重载(overload)来创建一个多态的 `max_value` 函数,它可以接受不同类型的参数并返回相应类型的最大值。下面是一个简单的实现示例:
```cpp
#include <iostream>
#include <type_traits>
// 检查是否是整数类型
template <typename T>
struct is_integer : std::integral_constant<bool, std::is_integral<T>::value> {};
// 定义 max_value 对于两个整数
template <typename T1, typename T2>
T1 max_value(T1 a, T2 b) {
return (a > b) ? a : b;
}
// 如果第一个是整数,尝试对第二个进行模板匹配
template <typename T1, typename T2>
auto max_value(T1 a, T2 b) -> decltype(max_value(a, static_cast<typename std::common_type<T1, T2>::type>(b))) {
return max_value(a, b);
}
// 类似地,定义 max_value 用于三个整数
template <typename T1, typename T2, typename T3>
T1 max_value(T1 a, T2 b, T3 c) {
return max_value(max_value(a, b), c);
}
// 为浮点数提供版本
template <typename T1, typename T2>
T1 max_value(T1 a, T2 b) {
return (a > b) ? a : b;
}
// 继续处理一个浮点数一个整数的情况
template <typename T1, typename T2>
auto max_value(T1 a, T2 b) -> decltype(max_value(std::declval<T1>(), b)) {
return max_value(a, b);
}
int main() {
int i = 5, j = 7, k = 3;
float f1 = 3.14, f2 = 2.718;
std::cout << "Max of two integers: " << max_value(i, j) << std::endl;
std::cout << "Max of three integers: " << max_value(i, j, k) << std::endl;
std::cout << "Max of two floats: " << max_value(f1, f2) << std::endl;
std::cout << "Max of float and integer: " << max_value(f1, i) << std::endl;
return 0;
}
```
阅读全文