泛型编程:不再针对某种类型,而是可以广泛的使用
模板(Template)指C++程序设计设计语言中采用类型作为参数的程序设计,支持通用程序设计。C++ 的标准库提供许多有用的函数大多结合了模板的观念,如STL以及IO Stream。模板是C++支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数、返回值取得任意类型
通常有两种形式:函数模板和类模板;
函数模板 针对仅参数类型不同的函数;
类模板 针对仅数据成员和成员函数类型不同的类。
使用模板的目的就是能够让程序员编写与类型无关的代码。
模板实际上就是根据传过来的地址 再生成相应的类型的新的函数 再去调用这个函数
并不是调用模板函数
函数模板的类型一般是由编译器根据实参传递给形参推演出来的,如果不能自动推演,就要显示实例化,知道模板参数。
模板参数也是可以给缺省类型的。
模板参数:很多用法和函数参数是很像的,传递的是类型,函数参数传递的是对象值
函数模板的声明与定义
类模板的声明与定义
模板不支持声明和定义分别放到两个文件中,会出现链接错误,一般都要放到一个文件中。
解决方案1:在template.cpp中正对要使用的模板类型显示实例化
解决方案2:不要分类两个文件(推荐)
为什么模板不支持声明与定义分离?
因为编译器找不到目标的实例化,不会生成具体的代码
到了链接阶段,没找到具体的代码,因为没有生成,所以会导致链接错误。