注册 登录
编程论坛 新人交流区

急需解决

vczxz 发布于 2007-10-29 22:50, 428 次点击
template <class T>
T max(T x,T y)
#include <iostream.h>
{
return(x>y)?(x):(y);
}
double max(double ,double);//重载了一个double类的函数为什么这一个题还是不能运行
void main()
{
int x=3,y=4;
long l=5;
double a=1.1,b=3.4;
cout<<max(x,y)<<endl;//调用int max(int ,int)
cout<<max(a,b)<<endl;//调用double max(double ,double)
cout<<max(l,a)<<endl;//调用double max(double ,double)
cout<<max(a,l)<<endl;//调用double max(double ,double)
cout<<max(x,l)<<endl;//调用double max(double ,double)
}
会C++的人给我指点一个啊
我快发了一个月了

6 回复
#2
negatlov2007-10-29 23:19

我在学习中。。。不知道噢

#3
chen179812007-10-30 07:17

首先,你定义了函数模板,你为什么还要在声明double max(double ,double)函数呢?

其次,我建议你编译你的代码,看看出错的消息是什么。

#4
vczxz2007-10-30 16:51
听我说一句
我定义的模版是处理两个相同类型的数据,如果是double 和int那又怎办呢
所以我重载了一个double类型的函数 不知道大哥听说过隐式转换没有,如果像上题的long 和int类型的则调用重载double max(double ,double)(自考本科本上这么说的是刘振安主编的)自考本科书上在讲模板时这是一个例题,但是在vc++6.0上就是调不出来,一直报错为类型不想同。
我就是想搞清楚在模板这一知识点上有没有这一说法
这在自考书上这么看过,来请大家求证一下;
原题是这么说的一字不错:
template <class T>
T max(T x,T y)
{
return(x>y)?(x):(y);
}
double max(double ,double);//重载模板函数
//也可使用原型int max(int,int)
//只能从其中选择一个
#include "iostream.h"
void main()
{
int x=3,y=4;
long l=5;
double a=1.1,b=3.4;
cout<<max(x,y)<<endl;//调用模板int max(int ,int)
cout<<max(a,b)<<endl;//调用模板double max(double ,double)
cout<<max(l,a)<<endl;//调用重载double max(double ,double)
cout<<max(a,l)<<endl;//调用重载double max(double ,double)
cout<<max(x,l)<<endl;//调用重载double max(double ,double)
}
程序最后输出为:
4
3.4
5
5
5
#5
vczxz2007-10-31 12:33
[flash=500,350]http://[/flash]
#6
vczxz2007-10-31 12:35
怎么没有人说话啊

#7
zhuliyan2007-10-31 14:32

只要定义的是double型,自然可以将int转换过去
就是隐式转换
在区分就属画蛇添足了
定义下面的模板函数
加上<cmath>头文件即可
template<typename Type>
Type max1(Type a,Type b)
{
return max(a,b);
}
template<typename T>
T max1(T a,T b,T c)
{
b=max1(a,b);
c=max1(b,c);
return c;
}
在自定义函数时不要使用
系统函数名,如max()
1