cpp10-模板及泛型编程.ppt

  1. 1、本文档共35页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算机学院 计算机网络与信息安全研究室 张荣博 第9章 模板与泛型编程 模板的概念 提出问题 解决方法 分析问题 模板的定义 模板本质上就是参数化多态,是一种使用无类型参数来产生一系列函数或类的机制,是C++的一个重要特性。 模板可以分为两类: 函数模板 类模板 函数模板与模板函数 函数模板可以用来创建一个通用功能的函数,以支持多种不同形参,进一步简化重载函数的函数体设计。 声明方法: template class T //模板声明 T max (T x, T y) //定义函数模板 { return (xy)? x:y; } 例题 #includeiostream using namespace std; template class T T max (T x, T y) { return (xy)? x:y;} void main() { int i=10,j=56; float x1=50.34f,x2=56.34f; double y1=673.36,y2=465.972; coutThe max of i,j is:max(i,j)endl; coutThe max of x1,y1 is:max(x1,x2)endl; coutThe max of x2,y2 is:max(y1,y2)endl; } 函数模板小结 类模板与模板类的概念 类模板:一个类模板允许用户为类定义一种模式,使得类中的某些数据成员、某些成员函数的参数、某些成员函数的返回值,能取任意类型。它的存在不代表一个具体的、实际的类,而是代表一类的类,是类的集合。 类模板的使用 类模板的使用。类模板的使用实际上是将类模板实例化成一个具体的类,它的格式为: 类名 实际的类型 对象名; int main() { classnamefloat obj; obj.SetValue(1.0); float tmp = obj.GetValue(); } 链表类模板的定义 模板、类、对象、函数之间的关系 群体的概念 群体是指由多个数据元素组成的集合体。群体可以分为两个大类:线性群体和非线性群体。 线性群体中的元素按位置排列有序 (数组)。 非线性群体不用位置顺序来标识元素(链表)。 容器 容器的接口 通用容器运算符 ==,!=,,=,,=,= 方法(函数) 迭代方法( 指针的移动 ) begin(),end(),rbegin(),rend() 访问方法 size(),max_size(),swap(),empty() 适配器与迭代器 适配器是一种接口类(栈适配器) 为已有的类提供新的接口。 目的是简化、约束、使之安全、隐藏或者改变被修改类提供的服务集合。 算法与函数对象 C++标准模板库中包括70多个算法 其中包括查找算法,排序算法,消除算法,记数算法,比较算法,变换算法,置换算法和容器管理等等。 顺序容器——向量 向量属于顺序容器,用于容纳不定长线性序列(即线性群体),提供对序列的快速随机访问(也称直接访问) 向量是动态结构,它的大小不固定,可以在程序运行时增加或减少。 向量是应用较多的STL容器。 本节作业 函数对象 一个行为类似函数的对象,它可以没有参数,也可以带有若干参数,其功能是获取一个值,或者改变操作的状态。 例题:求范围2~N中的质数,N在程序运行时由键盘输入。 Shenyang Aerospace University 9.1 模板概念(★) 9.2 函数模板 9.3 类模板 9.4 泛型编程 (★) C++中常见的问题 void swap(int a , int b){ int tmp = 0; tmp = a; a = b; b = tmp; } //交换两个浮点数 void swap(float a , float b){ float tmp = 0.0; tmp = a; a = b; b = tmp; } int main(){ int a = 10, b=20; float c = 1.2, d=2.4; cout “ a= “ a “ b= ”b; cout “ c= “ c “ d= ”c; swap(a,b); cout “ a= “ a “ b= ”b; swap(c,d); cout “ c= “ c “ d= ”c; return 0; } 在上面例子中,两个swap函数实现的功能相同,只是参数类型不同,为了实现不同类型的数据交换必须重新编辑函数。造成了重复劳动。 面向对象程序设计方法出现的目的之一是实现软件重用,能否提供一种方法将两个函

文档评论(0)

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

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

1亿VIP精品文档

相关文档