
用函数模板实现重载函数max1可分别求取两个整数,三个整数,两个双精度数,三个双精度数的最大值。用c++ 5
3个回答
展开全部
T max(T a, T b, T c=0)
{
T n;
if(!c) c=a; //对于两个形参也可以,但是对于三个形参,在调用函数的时候如果a,b,c,中有一个为零,有意识的使其c!=0就OK~
n = a > b ? a : b;
n = n > c ? n : c;
return n;
}
这个是有问题的,要是a和b都是负数,而c为0时,象这样cout<<max(-2,-3,0)<<endl;就出问题了。
所以用这种方法实现不了、
要真要实现把T max(T a, T b, T c=MAX);MIN为很大的数就行了。
#include<iostream>
using namespace std;
#define MAX 10000
template<class T>
T max(T a, T b, T c=MAX)
{
T n;
if(c!=MAX)
{ n = a > b ? a : b;
n = n > c ? n : c;
}
else
n = a > b ? a : b;
return n;
}
void main()
{
cout<<max(-2,-3,0)<<endl;
cout<<max(-2,-4)<<endl;
}
{
T n;
if(!c) c=a; //对于两个形参也可以,但是对于三个形参,在调用函数的时候如果a,b,c,中有一个为零,有意识的使其c!=0就OK~
n = a > b ? a : b;
n = n > c ? n : c;
return n;
}
这个是有问题的,要是a和b都是负数,而c为0时,象这样cout<<max(-2,-3,0)<<endl;就出问题了。
所以用这种方法实现不了、
要真要实现把T max(T a, T b, T c=MAX);MIN为很大的数就行了。
#include<iostream>
using namespace std;
#define MAX 10000
template<class T>
T max(T a, T b, T c=MAX)
{
T n;
if(c!=MAX)
{ n = a > b ? a : b;
n = n > c ? n : c;
}
else
n = a > b ? a : b;
return n;
}
void main()
{
cout<<max(-2,-3,0)<<endl;
cout<<max(-2,-4)<<endl;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <stdio.h>
template <class T>
T max(T a, T b)
{
return a > b ? a : b;
}
template <class T>
T max(T a, T b, T c)
{
T n;
n = a > b ? a : b;
n = n > c ? n : c;
return n;
}
int main(int argc, char* argv[])
{
int a = 5, b = 2, c = 1, num;
num = max(a, b);
printf("max:%d\n", num);
c = 7;
num = max(a, b, c);
printf("max:%d\n", num);
double a1 = 5.235, b1 = 2.256, c1 = 1.1, num1;
num1 = max(a1, b1);
printf("max:%lf\n", num1);
b1 = 15.258;
num1 = max(a1, b1, c1);
printf("max:%lf\n", num1);
return 0;
}
template <class T>
T max(T a, T b)
{
return a > b ? a : b;
}
template <class T>
T max(T a, T b, T c)
{
T n;
n = a > b ? a : b;
n = n > c ? n : c;
return n;
}
int main(int argc, char* argv[])
{
int a = 5, b = 2, c = 1, num;
num = max(a, b);
printf("max:%d\n", num);
c = 7;
num = max(a, b, c);
printf("max:%d\n", num);
double a1 = 5.235, b1 = 2.256, c1 = 1.1, num1;
num1 = max(a1, b1);
printf("max:%lf\n", num1);
b1 = 15.258;
num1 = max(a1, b1, c1);
printf("max:%lf\n", num1);
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
模版??不要模版啦,直接搞个同名不同参数的重载就行了!!
追问
是要编重载函数的,不过还是需要用模板重新实现
追答
T max(T a, T b, T c=0)
{
T n;
if(!c) c=a; //对于两个形参也可以,但是对于三个形参,在调用函数的时候如果a,b,c,中有一个为零,有意识的使其c!=0就OK~
n = a > b ? a : b;
n = n > c ? n : c;
return n;
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询