0
点赞
收藏
分享

微信扫一扫

C++模板函数

萧萧雨潇潇 2022-01-26 阅读 150
c++

先看一段代码:

int sum(int a,int b,int c){
	return a + b + c;
}
float sum(float a,float b,float c){
	return a + b + c; 
}
char sum(char a,char b,char c){
	return a + b +c;
}
int main(int argc,char *argv[]){
	int d,e,f;
	float g,h,i;
	char x,y,z;
	d = e = f = 1;
	g = h = i = 1.1;
	x = y = z ='a';
	cout<<sum(d,e,f)<<endl;
	cout<<sum(g,h,i)<<endl;
	cout<<sum(x,y,z);
	return 0;
}

在这段代码中,用到了三个同名的函数sum(),定义多个同名的函数的机制在C++中叫作函数的重载。(补充:一个函数的签名是由这个函数的形参类型和以及形参个数决定的。C++可以定义两个或更多的同名函数,但是任何两个同名函数不能有同样的签名)。
这三个函数的参数类型和返回值类型都不同,但实现的功能都相同,如何实现代码的复用,从而减少代码量呢?接下来我们引入一个和sum()具有相同功能的模板函数程序:

template<class T>
T sumT(T a,T b,T c){
	return a + b + c;
} 
int main(int argc,char *argv[]){
	int d,e,f;
	float g,h,i;
	char x,y,z;
	d = e = f = 1;
	g = h = i = 1.1;
	x = y = z ='a';
	cout<<sumT(d,e,f)<<endl;
	cout<<sumT(g,h,i)<<endl;
	cout<<sumT(x,y,z);
	return 0;
}

程序的运行结果如下图(两个结果一致)在这里插入图片描述
在这里有人可能会对’a’ + ‘a’ + ‘a’ = ‘#‘产生疑问,首先字符’a’在ASCII中的十进制数值为97,那么sum(‘a’,‘a’,‘a’)的ASCII值便为291,由于ASCII共有128个字符(0~127)那么就需要进行取余操作:291%128=35,在ASCII表中对用’#’。
对于模板函数还要注意的一点是,template<class T>后面要紧跟函数,不是一次定义模板,这个程序就都可以用。

举报

相关推荐

0 条评论