模板类、模板函数声明定义在一起
模板函数、模板类声明和定义要放在一起,不要再.h中声明了,然后再.cpp中定义,这要编译器再链接时会提示找不到函数或类的标识符。
这是因为编译时是以文件为基础逐个文件编译的。对于普通的函数,如果定义在.h,实现在.cpp文件,程序在执行的时候可以通过.h文件找到函数在.cpp文件中的定义,可以执行。
** 但是模板函数如果定义在.h,实现在.cpp文件, 程序在执行的时候找不到函数的实现——不知道模板函数中的类型到底是什么,所以提示找不到标识符之类的错误 **
模板函数
定义:
1
2
3
4templete <class\typename T> 返回类型 函数名(包含类型T的参数列表)
{
函数主体;
}使用:
1
函数名(参数列表)
例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16template<class T> T add(const T& a, const T& b)
{
return a + b;
}
int main(void)
{
int a = 1;
int b = 2;
cout << add(a, b) << endl;
float n1 = 3.0;
float n2 = 4.5;
cout << add(n1, n2) << endl;
system("pause");
return 0;
}模板类
定义:
1
2
3template <class\typename T> class 类名{
类定义
};类外声明成员函数
1
2template <class T>
返回类型 类名<T>::函数名(参数){定义}如果返回类型是类对象,形式为 :类名
,而不只是类名 使用——实例化对象:
1
类名<数据类型(可以是自定义类型也可以是基本类型)> 对象名;
注意
在定义成员函数的时候,不能使用参数列表赋值
- 例子:
1 |
|
- 模板类声明为其他类的友元类
那么在其他类中,需要这么写:
1
template<class\typename T> friend class 模板类名
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!