第8章_模板与STL.ppt

  1. 1、本文档共39页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
本章要点 函数模板和类模板 标准模板库STL 8.1 模板简介 8.2 函数模板 用重载函数求两个数中较大的数的函数 函数定义如下: int Max(int a,int b) { return ab?a:b; } double Max(double a,double b) { return ab?a:b; } 8.2 函数模板 如果将上述函数中的类型参数化,即将int和double 都使用参数Type来代替,可以得到如下的通用代码段 Type Max(Type a,Type b) { return ab?a:b; } 当需要求两个整数或实数的最大值时,只要将Type替 换成int或者double,就可以得到前面定义的重载函 数。参数类型可以是任意数值类型。 8.2 函数模板 C++使用关键字template定义模板,其格式如下: template 模板参数表 函数定义 其中模板参数表中的内容为: class 标识符 或 typename 标识符 (至少1个) 当上述参数表中同时包含多个参数时,各项之间用 逗号间隔。 使用class关键字是早期C++中的语法,由于在C++ 中关键字class被用于类的定义,为了使语法更严格和 清晰,标准C++建议使用关键字typename。上述参数 化的函数称为函数模板。 #include iostream using namespace std; template typename T T Max(T a,T b) { return ab?a:b; } 8.3 类模板 经常会遇到一些类,只有某些数据的类型不相 同,而其余全部相同。例如C++中的数组没有越界 检查功能,经常造成系统崩溃,而且这个漏洞也是 很多计算机病毒攻击的位置。为了解决这个问题, 可以自己定义一个类,实现数组的功能并进行下标 越界检查。数组元素的类型可以有很多种,使用常 规的方法只能将写好的代码复制,修改对应的数据 类型的位置。这样做不仅增加工作量,而且容易产 生错误。C++使用类似函数模板的机制来解决这个 问题,称为类模板。 8.3 类模板 8.3.1 类模板的定义 同函数模板一样,类模板也不是一个具体的 类,而是类的一个样板。使用类模板可以生成类 类型,类模板实例化后得到一个模板类。模板类 才是真正的类,可以使用它来定义对象,然后使 用对象的成员函数。 使用函数模板和类模板可以带来更大规模的 代码共享,有利于提高程序的可复用性。 类模板的声明格式如下: template 类模板参数 类声明 其中模板参数表中的内容为: typename 标识符 或 class 标识符 或 类型表达式 标识符 第一种情况下的标识符代表类声明所声明类中 所参数化的类型名;第二种情况中的标识符则代表 类声明所声明的类中所参数化的常量,类型表达式 规定了常量的类型。当模板参数表中同时包含上述多 个参数时,参数之间用逗号分隔。 与函数模板使用方式相同,类模板也是只有在使用的时候才具体化为具体的类类型。使用模板类来使用对象时,按如下形式声明: 类模板名模板参数表 对象名1,… ,对象名n; 例如有越界检查功能的数组可以定义如下: templatetypename T //array.h class Array { public: Array(int a); virtual ~Array(); int GetSize()const; T operator[](int); private: int size; T * element; }; templatetypename T ArrayT::Array(int s) { size=s; element = new T[size]; } templatetypename T ArrayT::~Array() { delete [ ] element; } 上面的类模板声明了一个参数化的类型T,这个类型被用在数据成员element、重载运算符“[ ]”的声明中。 类模板的各个成员函数的实现语法与函数模板一致。由于这些函数是类模板的成员函数,该类模版的名字是ArrayT,所以每个成员函数名前都加上Array T。 使用类模板生成一个特定类时,需要指定参数T所代表的类型。例如,使用类型表达式Array int 可以声明一个元素类型为int 的数组类。 #include iostream #include array.h using namespace std; template typename T void F(Arr

文档评论(0)

kehan123 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档