编写重载函数max_value,可分别求取两个整数,三个整数,两个浮点数,一个浮点数一个整数的最大值。
时间: 2024-10-27 17:05:06 浏览: 30
重载与模板PPT学习教案.pptx
在编写重载函数`max_value`时,你需要考虑到输入参数的类型和数量差异,以便根据不同情况进行处理。这里是一个简单的例子,展示如何在C++中实现这个功能:
```cpp
#include <iostream>
#include <cfloat>
// 函数模板用于两个整数的最大值
int max_value(int a, int b) {
return (a > b) ? a : b;
}
// 函数模板用于三个整数的最大值
int max_value(int a, int b, int c) {
return std::max(a, std::max(b, c));
}
// 函数模板用于两个浮点数的最大值
double max_value(double a, double b) {
return (a > b) ? a : b;
}
// 结合不同类型参数的版本
template<typename T1, typename T2>
T1 max_value(T1 a, T2 b) {
if constexpr(std::is_same_v<T1, float> || std::is_same_v<T1, double>) {
// 如果其中一个类型是浮点数,直接返回较大的那个
return a > static_cast<T1>(b) ? a : b;
} else {
// 否则,假设都是整数,转换为浮点数比较
return static_cast<T1>(std::max(a, static_cast<T2>(b)));
}
}
int main() {
int i1 = 5, i2 = 10, i3 = 15;
double f1 = 3.5, f2 = 4.7;
std::cout << "Max of two integers: " << max_value(i1, i2) << std::endl;
std::cout << "Max of three integers: " << max_value(i1, i2, i3) << std::endl;
std::cout << "Max of two floats: " << max_value(f1, f2) << std::endl;
// 结合整数和浮点数
std::cout << "Max of an integer and a float: " << max_value(i1, f1) << std::endl;
return 0;
}
```
在这个示例中,我们首先定义了基本的整数和浮点数版本的`max_value`。然后,通过模板方法实现了可以接受不同类型参数的通用版本,根据参数的实际类型选择合适的比较方法。
阅读全文