C++中模板总结:函数模板和类模板

C++中的一种编程思想称为泛型编程,主要利用的技术就是模板。
C++提供两种模板机制:函数模板和类模板

一、函数模板

总结

1、函数模板利用关键字template
2、使用函数模板有两种方式:自动类型推到、显示指定类型
3、模板的目的是为了提高复用性,将类型参数化

注意事项:
1、自动类型推导,必须推导出一致的数据类型T,才可以使用
2、模板必须要确定出T的数据类型,才可以使用

普通函数和函数模板的调用规则:
1、如果函数模板和普通函数都可以实现,优先调用普通函数
2、可以通过空模板参数列表来强制调用函数模板 。 如:myPrint(a, b); //里不用写东西
3、函数模板也可以发生重载。 重载后不加直接调用 如:myPrint(a, b, c);
4、如果函数模板可以产生更好的匹配,优先调用函数模板

一般来说,既然提供了函数模板,最好就不要提供普通函数,否则容易出现二义性。

二、类模板

类模板和函数模板区别主要有两点:
1、类模板没有自动类型推导的使用方式
2、类模板在模板参数列表中可以有默认参数
如:templateclass NameType,class AgeType = int
那么在创建对象的时候就不用指定int类型,如:Person string p2(张三, 99);

类模板中成员函数和普通类中成员函数创建时机的区别:
1、普通类中的成员函数一开始就创建
2、类模板中的成员函数在调用时才创建

类模板对象做函数参数,即类模板实例化出对象,向函数传参的方式,一共有三种传入方式:
1、指定传入的类型:直接显示对象的数据类型 ( 最常用第一种)
2、参数模板化:将对象中的参数变为模板进行传递
3、整个类模板化:将这个对象类型 模板化进行传递

类模板与继承
1、当子类继承的父类是一个类模板时,子类在声明的时候,要指定出父类中T的类型
2、如果不指定,编译器无法给子类分配内存
3、如果想灵活指定出父类中T的类型,子类也需要变为类模板

类模板分文件编写
问题:类模板中成员函数创建时机是在调用阶段,导致分文件编写时链接不到
解决:
1、直接包含.cpp文件
2、将声明和实现写到同一个文件中,并更改后缀名为.hpp,hpp是约定的名称,并不是强制

最新回复(0)
/jishu_2B7RCG8xpx4YNg_2FtnNmm34VaWYXE2q1pged7Hj2mtnjg_3D4858733
8 简首页