鱼C论坛

 找回密码
 立即注册
查看: 2151|回复: 0

[技术交流] C++中关于函数模版的思考(二)

[复制链接]
发表于 2014-3-28 13:54:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
高级语言中对于函数来说我们用到了重载,这个机制用于一个功能但是参数个数不同的函数中,而对不同类型而参数个数相同的时候就需要模版了
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;
}

以上内容不是能难,但是也有不少可以挖掘的地方,不知各位有何高建,记得留言哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 00:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表