1.模板简介
#include <iostream>
#include <string>
using namespace std;
/*int max(int a, int b)
{
return a > b ? a : b;
}
float max(float a, float b)
{
return a > b ? a : b;
}*/
template <typename T>
T& max(T t1, T t2)
{
cout << "template function" << endl;
return (t1 > t2 ? t1 : t2);
}
int main()
{
int m = max(1,2);
cout << m << endl;
float n = (3.14,3.15);
cout << n << endl;
system("pause");
return 0;
}
2.函数模板
1.模板是c++的高级特性,分为函数模板和类模板,使用模板可以快速创建类型集合和函数集合,大大提高了大规模软件开发的效率。
2.语法格式
#include <iostream>
#include <string>
using namespace std;
template <typename T>
T sum(T t1, T t2)
{
cout << "template function" << endl;
return t1+t2;
}
int main()
{
int s = sum(1,2);
float f = sum(1.2,1.3);
cout << s << "," << f << endl;
int s2 = sum<int>(2,3.3);
cout << s2 << endl;
system("pause");
return 0;
}
其实宏定义也可以完成上述功能,但是宏定义是简单文本替换,并不对其进行类型检查,不安全。
3.类模板
1.使用template不仅可以定义函数模板,还可以定义类模板,类模板表示一族类,是用来描述通用数据类型或者处理方法的机制,它使类中的一些成员变量和成员函数的参数或返回值可以取任何类型的数据。
2.类模板的声明和语法格式。
template <类型形式参数表> class 类模板名称
{
//类模板
}
成员函数声明语法
template <类型形式参数表>
返回类型 类模板名称<类型名称表>::成员函数名称{形式参数列表}
{
//函数体
}
#include <iostream>
#include <string>
using namespace std;
template <typename T1,typename T2>
class MyClass
{
private:
T1 t1;
T2 t2;
public:
MyClass(T1 t1, T2 t2) :t1(t1), t2(t2){};
void display(){ cout << t1 << "," << t2 << endl; };
};
int main()
{
MyClass<int, double> myclass(100,3.3);
myclass.display();
MyClass<string, int> myclass2("a",4);
myclass2.display();
system("pause");
return 0;
}