1.模版分类
模版分为:函数模版和类模版
C++模版允许使用通过类型定义函数或类等。
模版编程思维有两种:泛型编程,通用编程。
怎么用模板?
定义模板格式:
template <class T> 或者 template <typename T>,class和typename都可以用来定义函数或者类模板
2.函数模版
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;
}
3.类模版
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;
}