#include <iostream>
using namespace std;
//函数的业务逻辑其实一样,但是函数的参数类型不一样
//发明一种类型,让类型参数化,方便程序员编码
//这就是泛型编程
//template告诉编译器开始了泛型编程,不会对T进行报错
template <typename T>
void mySwap(T &a,T &b)
{
T c;
c= a;
a= b;
b= c;
}
//函数模板的调用
//显示类型调用,自动类型推导
void main()
{
{
int x =50;
int y =100;
mySwap<int>(x,y);//函数模板 显示类型调用方式一
cout<<"x:"<<x<<"y:"<<y<<endl;
}
{
char a =50;
char b =100;
mySwap<char>(a,b);//函数模板 显示类型调用方式一
cout<<"a:"<<a<<"b:"<<b<<endl;
}
{
int x1 =5;
int y1 =10;
mySwap(x1,y1);//函数模板 自动类型推导 类型调用方式一
//但是建议最好建议是显式模板调用
cout<<"x1:"<<x1<<"y1:"<<y1<<endl;
}
cout<<"hello"<<endl;
system("pause");
return ;
}
void myswap01(int &a,int &b){
int c = 0;
c =a;
a= b;
b= c;
}
void myswap02(char &a,char &b){
char c = NULL;
c =a;
a= b;
b= c;
}
void main01(){
{
int x=10,y=20;
myswap01(x,y);
cout<<"x:"<<x<<"y:"<<y<<endl;
}
{
char a ='y';
char b ='h';
myswap02(a,b);
cout<<"x:"<<a<<"y:"<<b<<endl;
}
cout<<"hello"<<endl;
system("pause");
return ;
}
- 函数模板可以提供更方便的代码复用
- 此文章仅引出模板的概念
-
#include <iostream>
using namespace std;
//需求,对字符数组 int类型数组进行排序
template <typename T>
int mySort(T *array,int size){
T tmp;
if(array == NULL)
{
return -1;
}
for(int i =0;i<size;i++)
{
for(int j =i+1;j<size;j++)
{
if(array[i] < array[j])
{
tmp = array[i];
array[i] = array[j];
array[j] = tmp;
}
}
}
return 0;
}
int printS(int *array,int size){
for(int i =0;i<size;i++)
{
cout<<array[i]<<endl;
}
return 0;
}
void main(){
int array[] = {11,22,33,44,55,2,3,4,5,9};
int size = sizeof(array)/sizeof(array[0]);
mySort<int>(array,size);
//注意,你模板用了几个T,就在尖括号写几个,不用全部都写出来
printf("排序之后\n");
printS(array,size);
cout<<"hello"<<endl;
system("pause");
return ;
}