
模板第20章
第20章 模板

目录20.1模板的概念20.2为什么要用模板20.3函数模板20.4重载模板函数20.5类模板的定义20.6使用类模板20.7使用标准模板类库
20.1 模板的概念 20.2 为什么要用模板 20.3 函数模板 20.4 重载模板函数 20.5 类模板的定义 20.6 使用类模板 20.7 使用标准模板类库

模板第20章模板是C++语言相对较新的一个重要特征模板使程序员能够快速建立具有类型安全的类库集合和函数集合。,它的实现方便了更大规模的软件开发。模板是C++支持参数化多态的工具使用模板可以使用户为类或者函数声明一种一般模式
• 模板是C++语言相对较新的一个重要特征。 • 模板使程序员能够快速建立具有类型安全的 类库集合和函数集合。 • 它的实现方便了更大规模的软件开发。 • 模板是C++支持参数化多态的工具。 • 使用模板可以使用户为类或者函数声明一种 一般模式

20.1模板的概念在程序设计中,可能会存在两种情况1、两个或多个函数的程序结构相同,但是它们的参数类型或函数返回类型不同:2、两个或多个程序结构相同,但是部分成员的类型或成员函数的类型及参数的类型不同这两种情况中,都是程序框架都基本相同,只是具体实现细节不同
在程序设计中,可能会存在两种情况: • 1、两个或多个函数的程序结构相同,但是它 们的参数类型或函数返回类型不同; • 2、两个或多个程序结构相同,但是部分成员 的类型或成员函数的类型及参数的类型不同。 这两种情况中,都是程序框架都基本相同,只 是具体实现细节不同

20.1模板的概念C++提供了模板机制,利用模板可以简化程序代码,实现软件复用。,若一个程序的功能是对某种特定的数据类型进行处理,则若将所处理的数据类型说明为参数,就可以把程序改写成模板模板可以让程序对任何其他数据类型进行同样方式的处理
• C++提供了模板机制,利用模板可以简化程 序代码,实现软件复用。 • 若一个程序的功能是对某种特定的数据类型 进行处理,则若将所处理的数据类型说明为 参数,就可以把程序改写成模板。 • 模板可以让程序对任何其他数据类型进行同 样方式的处理

20.1模板的概念C++程序由类和函数组成C++的模板也分为:函数模板和类模板函数模板是一种抽象通用的函数,用它可生成一批具体的函数。这些由函数模板经实例化生成的具体函数称为模板函数
• C++程序由类和函数组成。 • C++的模板也分为:函数模板和类模板。 • 函数模板 ✓ 是一种抽象通用的函数,用它可生成一批具 体的函数。 ✓ 这些由函数模板经实例化生成的具体函数称 为模板函数

20.1模板的概念类模板是一种抽象通用的类,用它可生成一批具体的类。这些由类模板经实例化生成的具体类称为模板类。·因此,可以使用一个带多种不同数据类型的函数和类。而不必显示记忆针对不同的数据类型的各种具体版本
• 类模板 ✓ 是一种抽象通用的类,用它可生成一批具体 的类。 ✓ 这些由类模板经实例化生成的具体类称为模 板类。 • 因此,可以使用一个带多种不同数据类型的 函数和类。 • 而不必显示记忆针对不同的数据类型的各种 具体版本

20.2为什么要用模板1、关于函数考察两个swap()函数。一个交换两个整型数,另一个交换两个浮点数。:两个swap()的主体行为是一样的。。一个处理int型,另一个处理float型
1、关于函数 • 考察两个swap( )函数。 • 一个交换两个整型数,另一个交换两个浮点 数。 • 两个swap( )的主体行为是一样的。 • 一个处理int型,另一个处理float型

20.2为什么要用模板void swap(int & a,int& b){int temp= a;a=b;b =temp;函数体行为一样。但是处理的数void swap(float & a,float & b)据类型不同。{float temp = a ;a=b;b =temp ;
void swap( int & a , int & b ) { int temp = a ; a = b ; b = temp ; } void swap( float & a , float & b ) { float temp = a ; a = b ; b = temp ; } 函数体行为一 样。 但是处理的数 据类型不同

20.2为什么要用模板Ⅱ交换任何一对类类型对象,可以定义如下:void swap(T& a,T & b){T temp=a;a=b;b =temp;这样对任一类型T的两个对象x1和x2函数调用swap(x1,x2)总能使编译系统理解其交换意义。,否则,没交换一对新类型的对象,都要定义一个执行同样操作的重载函数。,有了函数模板后,重载就不必要了
//交换任何一对类类型对象,可以定义如下: void swap( T & a , T & b ) { T temp = a ; a = b ; b = temp ; } • 这样对任一类型T的两个对象x1和x2。 • 函数调用swap( x1 , x2 )总能使编译系统理解其交换意 义。 • 否则,没交换一对新类型的对象,都要定义一个执 行同样操作的重载函数。 • 有了函数模板后,重载就不必要了