学习黑马视频后复习模板知识点,参考(1条消息) 《黑马》——C++提高编程_漏网小鱼的博客-CSDN博客,若侵权,请告知,会删。
1、模板的概念
模板即建立的通用的模具,大大的提高了复用性
特点:
C++的一种编程思想即泛型编程,主要使用模板
两种模板机制:函数模板和类模板
template<typename T>
函数声明或定义/类
template :声明创建模板
typename : 表面后边跟着的符号为一种函数类型,可以用class代替
T :通用的数据类型
2、函数模板的基本语法
使用如下:
template<typename T> void mySwap(T& a,T& b) { T& temp = a; a = b; b = temp; } int main() { int a = 10; int b = 20; //1 自动类型推导 mySwap(a,b); //2 显示指定类型 mySwap<int>(a,b); }
函数模板两种调用方法:
3、函数模板注意事项
自动类型推导必须推导出一致的数据类型T才可以使用
模板必须要确定出T的数据类型,才可以使用
建议使用显示指定方式调用函数模板
4、普通函数和函数模板的区别
普通函数调用时可以发生自动类型转换(隐式类型转换)。
函数模板调用时,如果采用自动类型推导不会发生隐式类型转换,因为T分不清到底是哪种类型
函数模板调用时,如果采用显示指定方式可以发生隐式类型转换。
如:
int a = 10;
int b = 20;
char c = 'c' ;
myAdd(a,c);//普通函数可以发生隐式类型转换,即char转换成int类型
//myAdd1(a,c);//函数模板调用时,采用自动类型推导,不会发生隐式类型转换,程序报错
没有Add<int>(a,c);//函数模板调用采用显示类型转换,可以发生隐式类型转换
5、普通函数和函数模板调用规则
6、模板的局限性
当数据类型为自定义数据类型,如Person时,当比较两个Person类型的数据时,可以通过运算符重载,但是不太方便,还有另一种为特定的数据类型提供具体化模板
具体化模板:
显示具体化的原型和定义以template<> 开头,并指出具体类型
template<> bool myCompare(Person& p1,Person& p2) {}
具体化优于常规模板