C++知识3——函数模板与类模板

函数模板与类模板

函数模板

模板实质上就是重载
函数模板的定义形式:
template<模板参数表>
类型名 函数名 (参数表)
{
函数体的定义
}

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
#include<iostream>
using namespace std;
template<typename T>
T abs(T a){
return a<0?-a:a;
}
int main(){
int n=-5;
double d=-5.5;
cout<<abs(n)<<endl;
cout<<abs(d)<<endl;
return 0;
}

模板参数表:由逗号分隔的模板参数构成,可以包括以下内容
1:class(或typename)标识符,指明可以接收一个类型参数。这些类型参数代表的是类型,可以是内部类型或者自定义类型
2:”类型说明符”标识符,指明可以接收一个由”类型说明符”所规定类型的常量作为参数。
3:template<参数表>class标识符,指明可以接收一个类模板名作为参数
当类型函数的含义确定后,编译器将以函数模板为样板,生成一个函数,这一过程称为函数模板的实例化。
函数模板与函数的区别 :
1:函数模板本身在编译的时候不会产生任何目标代码,只有由模板生成的实例会产生目标代码
2:被多个源文件引用的函数模板,应当连同函数体一同放在头文件中,而不能像普通函数那样只将声明放在头文件中。
3:函数指针也只能指向模板的实例,而不能指向模板本身。

类模板

使用类模板使用户可以为类定义一种模式,使得类中的某些数据成员、某些成员函数的参数、返回值或局部变量能取任意值。
类模板声明的语法:
template<模板参数表>
class 类名
{
类成员声明
}
如果需要在类模板以外定义其成员函数,则要采用以下形式(每一个函数的类外实现都要写template<模板参数表>):
template<模板参数表>
类型名 类名<模板参数标识符列表>::函数名(参数表)
使用一个模板类建立对象时,声明方式:
模板名<模板参数表>对象1,对象2,……,对象n;

题目整理

1:类模板的使用实际上是将类模板实例化成一个类
2:类模板的模板参数:
能作为数据成员的类型
可作为成员函数的返回类型
可作为成员函数的参数类型
3:类模板的实例化是在编译时进行。