C++:模板(函数模板和类模板)

11_2

1.函数模板
函数重载:函数名相同,参数列表不同。静多态,编译时期的多态。C++种产生函数符号依赖于函数名和参数列表。
(1)把类型当作参数传入函数中,模板不可以直接运行,函数模板会在编译器根据使用情况生成对应的函数指令。
(2)模板不编译,模板生成的函数指令是需要编译的,模板中的语法错误会在生成对应的指令时候编译出错误,
(3)函数模板有类型自推的能力,使用函数模板可以不用传模板类型参数(cout<<typeid(T).name()<<endl)
(4)函数模板的特例化:模板特例化的优先级比普通版本要高,普通函数的优先级比模板特例化要高。
普通函数>特例化模板>普通模板
在这里插入图片描述

2.类模板
(1)类模板不编译,会在编译期根据使用方式生成对应的类指令,类模板中没有使用到的成员方法不会在编译期生成对应的指令,类模板使用时候必须加上模板类型参数,类模板无法自己推导类型函数
(2)类模板的特例化
类模板的成员方法在类外实现,类模板的成员方法只能在头文件中或者在使用到的cpp文件中实现,不能分开实现
为什么类模板的成员方法不能再其他cpp文件中实现?
类模板需要在编译时期将使用到的成员方法生成对应的指令,编译器是只针对单文件的。如果类模板的成员方法实现在了其他文件,编译期使用到该方法的文件不可见就无法生成对应的指令——就会报无法解析的外部符号。
(3)容器
能够容纳任何数据类型的数组

猜你喜欢

转载自blog.csdn.net/qq_48580892/article/details/121127789