第16章 让程变得更短——.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第16章 让程变得更短——

第16章 让程序变得更短——模板 现实世界中存在许许多多相似性的事物,例如:企业的组织机构、类的继承关系、政府部门的组织结构等。各种各样的打开操作,例如:打开一个盒子、打开一扇窗、打开一道门等,这些相似的操作在C++语言中可以抽像成相同或相似的代码,只是在事物的内部对其属性和操作的内涵不相同。这个抽象可以应用于同一个操作,这样开发人员在编写代码时就大大减少了代码的开发量,C++中提供了这样一种机制——模板。相对于一个类来说,从该类中可以创建任意个类的对象,不同的是建立该对象的时候初始化的值不一样,同样对于一个模板来说,从一个模板中可以创建任意个类型的定义,类型根据其初始值的不同而有所变化。 16.1 模板的概念与意义 C++中的模板可以分为函数模板和类模板,两者在编程过程中都有着重要的应用,函数模板主要是创建一个通用功能的函数,以支持多种不同形参,进一步简化重载函数的函数体设计。类模板能够创造出任意个类型的定义,类型根据其初值的不同而不同。 在使用C++语言进行编程时,需要设计一些类和函数,设计出的类型和函数有时会具有相似或相同的特点,将具有相似或相同特性的函数或类个归纳成一个类族或者函数族,然后再用一个统一的方式进行编程就叫做模板编程。使用模板可以创建一系列类似或相同的函数和类。在本章节中,将具体介绍下函数模板和类模板以及它们的定义和使用方法。 有的书上对模板的定义为:“模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数,从而实现了真正的代码可重用性”。模版可以分为两类,一类是函数模版,另一类是类模版。 16.2 函数模板 函数模板主要是创建一个通用功能的函数,以支持多种不同形参,进一步简化重载函数的函数体设计。在本章中将着重介绍一下函数模板的定义以及使用方法。 16.2.1 函数模板的定义 先来看一个例子,计算两个数字之后的函数Add,一个Add是计算两个整型的数值的和,一个Add是计算两个浮点型数值的和,两个函数实现的函数功能都是一样的,但是传递的参数类型和函数值返回的类型却不一样,一个传递的参数类型是整型返回值也是整型的数据,另一个传递的参数类型是浮点型返回值是浮点型的数据。 这两个函数的代码实现分别如下: int Add(int a,int b) { int sum ; sum = a + b; return sum ; } float Add(float a,float b) { float sum ; sum = a + b; return sum ; } 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; 上述格式中模板参数值列表的

文档评论(0)

jyf123 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:6153235235000003

1亿VIP精品文档

相关文档