第七章类模板与向量解读.ppt

  1. 1、本文档共35页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第七章 类模板与向量 主讲:冯传胜 Email:fcs@ 7.1 类模板 7.1.1 类模板基础知识 7.1.2 类模板的派生与继承 7.2 向量与泛型算法 7.2.1 定义向量列表 7.2.2 泛型指针 7.2.3 向量的数据类型 7.2.4 向量最基本的操作方法 7.3 出圈游戏 7.1 类模板 可将类看作是包含某些数据类型的框架,将这些数据类型从类中分离出来形成一个通用的数据类型T,为这个数据类型T设计一个操作集,并且允许原来那些数据类型的类都能使用这个操作集,这样将避免因为类的数据类型不同而产生重复性设计。 类型T不是类,而是对类的描述,称这为类模板。 编译时,由编译器将类模板与某种特定数据类型联系起来,就产生一个特定的类(称为模板类)。 利用类模板能大大简化程序设计。 7.1.1 类模板基础知识 类模板的成分及语法 类模板与函数模板的有些成分是相同的: 声明的方法:使用关键字template 参数的格式:使用关键字class 关键字class的含义是“任意内部类型或用户定义类型”,但T也可能是结构或类。 创建类模板时,在类模板参数表后应有类声明。 在类中可以像使用其他类型一样使用模板参数。可将模板参数用作: 数据成员的类型 成员函数的类型 成员函数的参数类型 类模板的声明方法: templat 类模板参数 class 类名{……//类体}; 例7.1:使用类模板的实例。 类模板的对象 类模板也称参数化类。初始化类模板时,只要传给它指定的数据类型,编译器就用指定类型替代模板参数产生的相应的模板类。 用类模板定义对象时的一般格式为: 类名 模板实例化参数类型 对象名(构造函数实参列表); 类名 模板实例化参数类型 对象名;//默认或无参数构造函数 使用模板类时,当给模板实例化参数类型一个指定数据类型时,编译器自动用这个指定数据类型替代模板参数。如使用上述模板定义对象: TAnyTempintiObj(1,2); TAnyTempdoubledObj(1.1,2,2); 上述两个对象由相同的类模板产生,但是完全不同的对象。它们不属于同一个类,因为它们分属两个不同的模板类。 例7.2:求4个数中最大数的类模板程序。 模板实例化参数类型包括数据类型和值。 例7.3:演示对4个数字求和的程序。 7.1.2 类模板的派生与继承 类模板可以继承,继承的方法与普通类一样。 声明模板继承之前,必须重新声明类模板。 模板类的基类和派生类可以是模板类或非模板类。 可以用一个非模板类为一组模板提供一种共同实现的方法。 例7.4:设计一个非模板类Point类,然后设计一个继承Point类的类模板Line。 例7.5:设计一个模板类Point,然后公有派生一个模板类Line。 7.2 向量与泛型算法 在数组的生存期内,数组的大小是不会改变的。 向量是一维数组的类版本,相同点是: 其中的元素连结存储  不同点是: 向量中存储元素的多少可以在运行中动态增长或缩小。 向量是类模板,具有成员函数,如用size()方法可以动态vector对象当前存储元素的数量。 7.2.1 定义向量列表 向量(vector)类模板定义在头文件vector中。它提供四种构造函数,用来定义由各元素组成的列表。 用length表示长度,type表示数据类型,name为对象名,则: vectortype name; 定义type类型的向量空表(没有元素) vectortype name(length); 定义具有lengh个元素的type类型的向量,初值为0 vectortype name(length,a); 定义具有lengh个元素的type类型的向量,初值为a vectortype name(name1); 使用已定义的向量name1构造向量name 例: vectorinta; vectorintb(10); vectorintc(2*3,5); vectorchard(20,’a’); vectorinte(a); vectorintf; f=b; vectorintg(4); g=b; 向量可以用赋值运算符整体赋值:大小可不同,类型相同。 可以用size()方法得到各向量的大小,如 a.size( ) 下面语句循环输出向量b的内容: for(int n=0;nb.size();n++) coutb[n]endl; 不能使用列表初始化向量,但可以先初始化一个数组,然后将数据内容复制给向量。如 int a[10]={0,1,2,3,4,5,6,7,8,9}; vectorintva(a,a+10); 其中a是数组起始地址,a+10是结束标志位。由于向量自动产生一个结束标志,所以va不需要和a一样长。va的长度可小于或大于a的长

文档评论(0)

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

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

1亿VIP精品文档

相关文档