C++模板允许使用通用类型定义函数或类等。模板分为函数模板和类模板
模板编程思维:泛型编程、通用编程
定义规则,比如游戏,谁来都可以使用这个规则玩游戏。
两个数相加的函数
这两个数是:整数 小数
int add(int a,int b)
{
return a + b;
}
float add(float a,float b)
{
return a + b;
}
string add(string a,string b)
{
return a + b;
}
怎么用模板?
定义模板格式:
template<class T> 或者 template<typename T>,class和typename都可以用来定义函数或者类模板。
函数模板
template<类型参数表>
返回值类型 函数名(参数列表)
{
}
调用函数模板的方法:函数名<实参类型>(实参列表);
例子:
#include<iostream>
using namespace std;
template <typename T>
T add(T a,T b)
{
return a + b;
}
class Point
{
private:
int xp;
int yp;
public:
Point(int x=0,int y=0)
{
xp = x;
yp = y;
}
void show()
{
cout << "xp:" << xp << ",yp" << yp << endl;
}
Point operator +(Point &a)
{
xp = xp + a.xp;
yp = yp + a.yp;
return (*this);
}
};
int main()
{
cout << add<int>(3,5) << endl;
cout << add<double>(5.5,6.7) << endl;
string s1 = "hello";
string s2 = " world";
cout << add<string>(s1,s2) << endl;
// 类--自定义类型也可以
Point a(1,3);
Point b(2,4);
Point res3 = add<Point>(a,b);
res3.show();
return 0;
}
类模板
template <typename T>
class 类名
{
};
调用类模板的格式:类名 <实参类型> 对象名(实参列表);
#include<iostream>
using namespace std;
template <typename T>
class A
{
public:
T m;
T n;
A(T mm=0,T nn=0)
{
m = mm;
n = nn;
}
void show()
{
cout << "m+n:" << m + n << endl;
}
};
int main()
{
A <int> obj1(3,5);
obj1.show();
// "hello" 默认是 char *类型
A <string> obj2(string("hello"),string("world"));
obj2.show();
return 0;
}