您好,欢迎访问三七文档
融智技术学院第16章让程序变得更短——模板现实世界中存在许许多多相似性的事物,例如:企业的组织机构、类的继承关系、政府部门的组织结构等。各种各样的打开操作,例如:打开一个盒子、打开一扇窗、打开一道门等,这些相似的操作在C++语言中可以抽像成相同或相似的代码,只是在事物的内部对其属性和操作的内涵不相同。这个抽象可以应用于同一个操作,这样开发人员在编写代码时就大大减少了代码的开发量,C++中提供了这样一种机制——模板。相对于一个类来说,从该类中可以创建任意个类的对象,不同的是建立该对象的时候初始化的值不一样,同样对于一个模板来说,从一个模板中可以创建任意个类型的定义,类型根据其初始值的不同而有所变化。融智技术学院16.1模板的概念与意义C++中的模板可以分为函数模板和类模板,两者在编程过程中都有着重要的应用,函数模板主要是创建一个通用功能的函数,以支持多种不同形参,进一步简化重载函数的函数体设计。类模板能够创造出任意个类型的定义,类型根据其初值的不同而不同。在使用C++语言进行编程时,需要设计一些类和函数,设计出的类型和函数有时会具有相似或相同的特点,将具有相似或相同特性的函数或类个归纳成一个类族或者函数族,然后再用一个统一的方式进行编程就叫做模板编程。使用模板可以创建一系列类似或相同的函数和类。在本章节中,将具体介绍下函数模板和类模板以及它们的定义和使用方法。有的书上对模板的定义为:“模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数,从而实现了真正的代码可重用性”。模版可以分为两类,一类是函数模版,另一类是类模版。融智技术学院16.2函数模板函数模板主要是创建一个通用功能的函数,以支持多种不同形参,进一步简化重载函数的函数体设计。在本章中将着重介绍一下函数模板的定义以及使用方法。融智技术学院16.2.1函数模板的定义先来看一个例子,计算两个数字之后的函数Add,一个Add是计算两个整型的数值的和,一个Add是计算两个浮点型数值的和,两个函数实现的函数功能都是一样的,但是传递的参数类型和函数值返回的类型却不一样,一个传递的参数类型是整型返回值也是整型的数据,另一个传递的参数类型是浮点型返回值是浮点型的数据。这两个函数的代码实现分别如下:intAdd(inta,intb){intsum;sum=a+b;returnsum;}floatAdd(floata,floatb){floatsum;sum=a+b;returnsum;}融智技术学院16.2.2函数模板的用法上一小节中讲到了函数模板的定义和定义模板的具体方法,在本小节中将结合具体的例子来讲述如何将模板进行实例化以及如何使用模板。使用函数模板,就是先定义一个模板实例然后再调用这个函数模板名。使用函数模板的形式为:函数模板名(函数模板形参列表);在使用了模板的程序中,编译时当编译器发现有一个函数模板被调用时,将根据数据实参中的对象或者变量的类型来进行确认是否和函数模板中的形参列表相对应,如果相对应,就会生成一个函数,该函数的函数体与函数模板中的函数体一致,函数的返回值和形参列表将和实际的参数和函数返回值一样。融智技术学院16.2.2函数模板的用法融智技术学院16.2.3函数模板的重载在调用一个普通函数时可以对函数进行重载,同样,也能够用相同的函数名来重载一个函数模板,当编译器在处理代码中的函数调用的时候,能够根据实际情况来选择一个最匹配模板或者函数进行调用。融智技术学院16.3类模板类模板能够根据不同的参数建立不同的类成员,在一个类模板中,它的成员变量类型、方法的返回值类型以及方法的参数类型可以取不同的类型,在对一个类模板进行实例化时,根据实际传入的参数类型来实例化成具体的类的对象。融智技术学院16.3.1类模板的定义定义一个类模板的方法为:template模板参数列表class类名{类的成员;};在上面的定义中,template定义类模板的关键字,关键字后面的尖括号里面的是类模板的参数类型列表,参数类型用class或者typename,这两者都可以用,模板参数列表中也可以包含普通的参数类型,如:int等。class为定义类时的关键字,但是类模板却不是类,class后面是类模板的名字,紧接着是由大括号“{}”包括起来的类的成员,类的成员包括成员变量和方法等。类模板中的成员即可以是一个普通的函数也可以是一个函数模板。融智技术学院16.3.2类模板的实例化类模板不是一个类,只有在使用了类模板创建了一个类的对象时才能实例化为一个具体的类,然后在由该类创建一个类的对象。对雷模板进行实例化和创建一个类的对象的格式为:类模板名模板参数值列表类对象1,类对象2,….类对象N;上述格式中模板参数值列表的名就是实际实例化对象时的数据类型名,数据类型可以为普通的数值型也可以为用户自己定义的结构体数据也可以为类类型数据。参数值列表中也可以包含一个常数值,用来初始化一个参数列表中的普通的数据类型,模板参数值中的数值列表顺序要跟类模板中定义的一致。融智技术学院16.3.3模板类和类模板类模板是一种模板,跟函数模板相似,主要用来产生类。例如下面一个实例:templateclassTPhone,classTName,intnumclassStuAddr{};跟在class后面的StuAddr就是一个类模板。类模板不是类。在C++的新的标准中可以将类模板当成一种数据类型来看,可以在其他的模板中充当参数来进行传递,但是模板不能作为形参来进行传递。模板类是一个类,它是由一个类模板实例化而成的。通常是由传递给类模板一个实参而得到的模板类。例如:StuAddrstring,string,50Add1;融智技术学院16.3.4类模板的应用在前面的章节中主要讲解了类模板的定义和类模板的实例化,在后面还简单介绍了模板类和类模板的区别,下面我们通过一个类模板的实际的例子在详细的回顾下类模板的定义以及使用。下面利用模板技术来定义一个栈类,栈(stack)是一种先进后出的数据结构。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。栈是一种顺序线性结构,在栈中可以进行的操作有:入栈、出栈、获取栈顶元素和打印栈,接下来就用模板技术来定义一个栈的类模板。融智技术学院16.3.4类模板的应用融智技术学院16.3.4类模板的应用融智技术学院16.4本章总结模板技术编程是C++中的一种高级技术,他是对C++面向对象编程的一个非常好的补充,模板可以分为函数模板和类模板,类模板和函数模板。两者在编程过程中都有着重要的应用,函数模板主要是创建一个通用功能的函数,以支持多种不同形参,进一步简化重载函数的函数体设计。通过本章的学习,希望读者能够掌握C++语言中一些高级的技术,能够对模板有一个深刻的意识,能够理解C++语言中的函数模板和类模板的定义、使用的方法,能够区分清楚类模板和模板类的不同之处,能够利用模板技术在实际的编程中进行开发。
本文标题:第16章 模板
链接地址:https://www.777doc.com/doc-4010508 .html