模板
C++里面两种编程思想:1.面向对象;2.泛型编程思想
函数模板的语法
template
函数声明或定义
函数模板的目的
对不同类型实现同一功能时的通用性。其中T表示通用的数据类型
举例
#include <iostream>
using namespace std;
void SwapInt(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
}
void SwapDouble(double &a, double &b)
{
double temp = a;
a = b;
b = temp;
}
template <typename T>
void mySwap(T &a, T &b)
{
T temp = a;
a = b;
b = temp;
}
int main(int argc, const char *argv[])
{
int a = 10;
int b = 20;
mySwap(a, b);
cout << "a = " << a << endl;
cout << "b = " << b << endl;
double c = 10.10;
double d = 20.20;
mySwap(c, d);
cout << "c = " << c << endl;
cout << "d = " << d << endl;
return 0;
}
函数模板和普通函数区别:
普通函数可以发生隐式类型转换;函数模板的自动类型推导是不能发生隐式类型转换的,而指定类型的函数模板可以发生隐式类型转换。示例如下:
#include <iostream>
using namespace std;
int myAdd(int a, int b)
{
return a + b;
}
template <typename T>
T myAdd01(T a, T b)
{
return a + b;
}
void test01()
{
int a = 10;
int b = 20;
cout << myAdd(a, b) << endl;
}
void test02()
{
int a = 10;
int b = 20;
char c = 'c';
cout << myAdd(a, c) << endl;//正确,普通函数可以进行隐式类型转换,将字符c看成99
//cout << myAdd01(a, c) << endl;//错误,类型不对,无法进行隐式类型转换
cout << myAdd01<int>(a, c) << endl;//正确,函数模板显示指定类型时可以进行隐式类型转换
}
int main(int argc, const char *argv[])
{
//test01();
test02();
return 0;
}