一.模板
1.模板的概念
模板就是建立通用的摸具,大大提高复用性
模板的特点:
1.模板不可以直接使用,它只是一个框架
2.模板的通用并不是万能的
2.函数模板
C++另一种编程思想称为泛型编程,主要利用的技术就是模板
C++提供两种模板机制,函数模板和类模板
2.1 函数模板语法
函数模板的作用,建立一个通用函数,其函数返回值类型和形参类型可以不具体制定,用一个虚拟的类型来代表
语法:
1.template<typename T>
2.函数声明或定义
解释:
template---声明创建模板
typename---表明其后面的符号是一种数据类型,可以用class代替
T---通用的数据类型,名称可以替换,通常为大写字母
2.2 函数模板注意事项
注意事项:
1.自动类型推到,必须推导出一致的数据类型T,才可使用
2.模板必须要推导出数据类型T,才可以使用
2.3 普通函数和函数模板的区别
1.普通函数调用时可以发生自动类型转换(隐式类型转换)
2.函数模板调用时,如果使用自动类型推导,不会发生隐式类型转换
3.如果利用显示指定类型的方式,可以发生隐式类型转换
2.4 普通函数和函数模板的调用规则
调用规则如下:
1.如果普通函数和函数模板都可以实现,优先调用普通函数
2.可以通过空模板参数列表来强制调用函数模板
3.函数模板也可以发生重载
4.如果函数模板可以发生更好的匹配,优先调用函数模板
3.类模板
3.1 类模板语法
类模板的作用,建立一个通用类,类中的成员,数据类型可以不具体定制,用一个虚拟的类型来代表。
语法:
1.template<typename T>
2.类
解释:
template---声明创建模板
typename---表明其后面的符号是一种数据类型,可以用class代替
T---通用的数据类型,名称可以替换,通常为大写字母
3.2 类模板和函数模板的区别
类模板和函数模板的区别主要有两点:
1.类模板没有自动类型推导的使用方式
2.类模板在函数参数列表中可以有默认参数
3.3 类模板中成员函数的创建时机
类模板中成员函数和普通类中创建函数创建时机是有区别的:
1.普通类中的成员函数一开始就可以创建
2.类模板中的成员函数在调用是才可以创建
3.4 类模板对象做函数参数
学习目标:
类模板实例化出的对象,向函数传参的方式
一共有三种传入方式:
1.指定传入的类型 ---直接显示对象的数据类型
2.参数模板化 ---将对象中的参数变为模板进行传递
整个类模板化 ---将这个对象类型模板化进行传递
3.5 类模板与继承
当类模板碰到继承时,需要注意以下几点:
1.当子类继承的父类时一个类模板时,子类在声明时,要指定出父类中T的类型
2.如果不指定,编译器无法给子类分配类型
3.如果想灵活指定出父类中T的类型,子类也许变为模板
总结:如果父类是类模板,子类需要指定出父类中T的数据类型