c++模板学习

重载函数模板

和普通函数一样,函数模板也可以被重载

#include<stdio.h>
#include<iostream>
#include<string>
using namespace std;


//1、求两个int值的最大值,
inline int const& Max(int const& a, int const& b){
	return a<b ? b:a;
}

//2、求两个任意类型值中的最大者,通过传引用进行调用
template<class T>
inline T const& Max(T const&a, T const& b){
	
	return a<b ? b:a;
	
}

//3、求三个任意类型值中的最大者,通过传引用进行调用
template<typename T>
inline T const& Max(T const& a, T const& b, T const& c){
	return max(max(a,b),c);
}


//也可以为指针和普通的字符串重载这个求最大值的模板
//求两个指针所指向值的最大者
template<typename T>
inline T* const& Max(T* const& a, T* const& b){
	return *a<*b ? b:a;
}

//求两个c字符串的最大者
inline char const* const& Max( char const* const& a, char const* const& b){
	return strcmp(a,b)<0 ? b:a;
}


int main(){
	cout<<Max(7,12,68)<<endl;//调用具有3个参数的模板,即第3个函数

	cout<<Max('a','b')<<endl;//调用max<char>(通过实参演绎),即第2个函数

	cout<<Max(42.5,22.5)<<endl;//调用max<double>(通过实参演绎),即第2个函数

	cout<<Max<>(7,42)<<endl;//调用max<int>(通过实参演绎)

	cout<<Max<double>(7,42)<<endl;//调用max<double>(没有实参演绎),即第2个函数

	cout<<Max(7,42)<<endl;//调用int重载的非模板函数,即第1个函数
	
	
	/***********************对于不同类型的参数,只允许使用非模板函数*******************/

	cout<<Max('a',107.7)<<endl;//通过int重载的非模板函数,即第1个函数
	
	cout<<Max(7,33.5)<<endl;//调用int重载的非模板函数,即第1个函数

	int a=7;
	int b=43;
	string s="hey";
	string t="you";
	cout<<Max(s,t)<<endl;//求两个string类型的最大值

	int*p1=&a;
	int*p2=&b;
	cout<<Max(p1,p2)<<endl;

	char const*s1="david";
	char const*s2="nico";
	cout<<Max(s1,s2)<<endl;

	system("pause");
}
总结:

1、模板函数为不同的模板实参定义了一个函数家族

2、当你传递模板实参的时候,可以根据实参的类型来对函数模板进行实例化

3、可以显式指定模板参数

4、可以重载函数模板

5、当重载函数模板时,把你的改变限制在:显式地指定模板参数

6、一定要让函数模板得所有重载版本的声明都位于它们被调用的位置之前



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值