#include<iostream>
using namespace std;
/*
原始的函数重载 但是string类型的交换不能实现
void Swap(int & a, int &b)
{
int t = a;
a = b;
b = t;
}
void Swap(double & a, double &b)
{
double t = a;
a = b;
b = t;
}
*/
/*
将以上函数用下面的模板函数:
template<typename/class 类型参数表>
返回类型 函数模板名(函数参数列表)
{
函数模板定义体
}
换成模板函数的时候 则以下3种函数都可以实现
注意:
函数模板,只适用于函数的参数个数相同而类型不同,且函数体相同的情况。
如果个数不同,则不能用函数模板。
*/
/*
函数模板(不是函数)
需要函数模板实例化 才是函数
*/
template <typename T>
void Swap(T& a,T &b )
{
T t = a;
a = b;
b = t;
}
int main()
{
//相同类型 可以使用模板
//*********************************
int a = 2; int b = 3;
Swap<int>(a,b);//<int>是隐式发生的
cout<<a<<" "<<b<<endl;
//*********************************
double ia = 2.4; double ib = 3.4;
Swap(ia,ib);
cout<<ia<<" "<<ib<<endl;
//利用函数重载 当增加新的类型的数据时 还要添加新的重载函数
//*********************************
string a1 = "nihao"; string b1 = "china";
Swap(a1,b1);
cout<<a1<<" "<<b1<<endl;
return 0;
}
using namespace std;
/*
原始的函数重载 但是string类型的交换不能实现
void Swap(int & a, int &b)
{
int t = a;
a = b;
b = t;
}
void Swap(double & a, double &b)
{
double t = a;
a = b;
b = t;
}
*/
/*
将以上函数用下面的模板函数:
template<typename/class 类型参数表>
返回类型 函数模板名(函数参数列表)
{
函数模板定义体
}
换成模板函数的时候 则以下3种函数都可以实现
注意:
函数模板,只适用于函数的参数个数相同而类型不同,且函数体相同的情况。
如果个数不同,则不能用函数模板。
*/
/*
函数模板(不是函数)
需要函数模板实例化 才是函数
*/
template <typename T>
void Swap(T& a,T &b )
{
T t = a;
a = b;
b = t;
}
int main()
{
//相同类型 可以使用模板
//*********************************
int a = 2; int b = 3;
Swap<int>(a,b);//<int>是隐式发生的
cout<<a<<" "<<b<<endl;
//*********************************
double ia = 2.4; double ib = 3.4;
Swap(ia,ib);
cout<<ia<<" "<<ib<<endl;
//利用函数重载 当增加新的类型的数据时 还要添加新的重载函数
//*********************************
string a1 = "nihao"; string b1 = "china";
Swap(a1,b1);
cout<<a1<<" "<<b1<<endl;
return 0;
}