函数题:最大值(函数模板)
请设计求两个对象最大值的函数模板。
#include <iostream>
using namespace std;
/* 你提交的代码将被嵌在这里 */
int main()
{
int a, b, c;
cin >> a >> b;
c = Max(a, b);
cout << c << endl;
return 0;
}
#### 输入样例
in
37 29
#### 输出样例
out
37
答案:若无答案欢迎评论
首先看下面的模板
c++
template <typename TYPE>
TYPE Max(TYPE x, TYPE y)
{
return x >= y ? x : y;
}
函数的参数是对象,函数值也是对象,将会执行拷贝构造函数和析构函数。
再看下面的模板
c++
template <typename TYPE>
TYPE& Max(TYPE &x, TYPE &y)
{
return x >= y ? x : y;
}
函数的参数是引用,函数值也是引用,函数里没有定义新对象,不会执行拷贝构造函数和析构函数。但函数的参数为普通引用,不能引用常量。
因此,正确答案应该是:
c++
template <typename TYPE>
TYPE& Max(const TYPE &x, const TYPE &y)
{
return (TYPE&)(x >= y ? x : y);
}
或
c++
template <typename TYPE>
TYPE& Max(const TYPE &x, const TYPE &y)
{
return const_cast<TYPE&>(x >= y ? x : y);
}
说明:函数的参数是常量引用,函数值是普通引用,因此需要做强制类型转换。
当然,下面的答案也能通过测试。
c++
template <typename TYPE>
const TYPE& Max(const TYPE &x, const TYPE &y)
{
return x >= y ? x : y;
}
#include <iostream>
using namespace std;
/* 你提交的代码将被嵌在这里 */
int main()
{
int a, b, c;
cin >> a >> b;
c = Max(a, b);
cout << c << endl;
return 0;
}
#### 输入样例
in
37 29
#### 输出样例
out
37
答案:若无答案欢迎评论
首先看下面的模板
c++
template <typename TYPE>
TYPE Max(TYPE x, TYPE y)
{
return x >= y ? x : y;
}
函数的参数是对象,函数值也是对象,将会执行拷贝构造函数和析构函数。
再看下面的模板
c++
template <typename TYPE>
TYPE& Max(TYPE &x, TYPE &y)
{
return x >= y ? x : y;
}
函数的参数是引用,函数值也是引用,函数里没有定义新对象,不会执行拷贝构造函数和析构函数。但函数的参数为普通引用,不能引用常量。
因此,正确答案应该是:
c++
template <typename TYPE>
TYPE& Max(const TYPE &x, const TYPE &y)
{
return (TYPE&)(x >= y ? x : y);
}
或
c++
template <typename TYPE>
TYPE& Max(const TYPE &x, const TYPE &y)
{
return const_cast<TYPE&>(x >= y ? x : y);
}
说明:函数的参数是常量引用,函数值是普通引用,因此需要做强制类型转换。
当然,下面的答案也能通过测试。
c++
template <typename TYPE>
const TYPE& Max(const TYPE &x, const TYPE &y)
{
return x >= y ? x : y;
}