大弟子 发表于 2014-3-28 13:54:20

C++中关于函数模版的思考(二)

高级语言中对于函数来说我们用到了重载,这个机制用于一个功能但是参数个数不同的函数中,而对不同类型而参数个数相同的时候就需要模版了
c++小程序
#include<iostream>
using namespace std;

template <class T>
T max(T a,T b)
{
return         a>b?a:b;
}

int main()
{
int a,b;cin>>a>>b;
cout<<max(a,b);
return 0;
}

这是一个简单的例子看一看出关键字是template<class T>是一个模版的结构开头,这样求最大值的时候我们就不需要重复写好几个相同功能的c++代码
注意在调用函数的时候它的类型是自动匹配的。不需要显示出来。
以上是最基本用法,然而我们会遇到一下情况
#include<iostream>
using namespace std;

template <class T,class E>
E max(T a,E b)
{
return         a>b?a:b;
}

int main()
{
int a;float b;cin>>a>>b;
cout<<max(a,b);
return 0;
}

就是当我们的函数需要两种不同类型的时候怎么办呢,我想看了以上代码就明白了吧。但是不管怎么样,他们的相同点就是类型是自动匹配的。
事实上我们也有失误的时候,我们如果不能很好的匹配类型,也就是说“牛头不对马嘴”那么靠编译器自动匹配就会按照隐式类型转换的规则改变参数类型,最终导致结果精度的损失。
看代码,大家可以试试。
#include<iostream>
using namespace std;

template <class T,class E>
E max(T a,E b)
{
return         a>b?a:b;
}

int main()
{
int a;float b;cin>>a>>b;
cout<<max(a,b);
return 0;
}

以上内容不是能难,但是也有不少可以挖掘的地方,不知各位有何高建,记得留言哦
页: [1]
查看完整版本: C++中关于函数模版的思考(二)