- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第8章 类模板与向量容器 在C++中,不但可以设计函数模板,满足对不同类型数据的同一功能要求,还可以设计类模板,来表达具有相同处理方法的数据对象集。类模板也是实现STL库的基础。 向量容器vector是使用最广泛的容器之一,它克服了数组的局限性。 本章将简要介绍使用向量容器类的基础知识,并引入STL库和范型算法的基础知识。 ?? 主要内容 8.1 类模板 8.2 向量容器与范型算法 8.3 向量应用实例 8.1 类模板 如果将类看做包含某些数据类型的框架,然后将数据类型从类中分离出来形成一个通用的数据类型T,并且允许具体数据类型的类能使用数据类型T所提供的不同操作,这将避免因为类的数据类型不同而产生的重复性设计。 其实,这种类型并不是类,而仅仅是类的描述,常称之为类模板。 在编译时,由编译器将类模板与某种特定数据类型联系起来,就产生一个真实的类。 由此可见,利用类模板进行程序设计,就如烹调食物一样,只要购买了原料,就可以做出不同口味的菜肴。 ?? 8.1.1 类模板基础知识 1. 类模板的成分及语法 可以用类模板来定义类,类模板是对象特性更一般的抽象。简言之,一个类模板就是一个抽象的类。类模板与函数模板的有些成分是相同的,例如声明的方法及参数的格式等。关键字class在这里的含义是“任意内部类型或用户定义类型”,但T也可能是结构或类。对于函数模板及类模板来说,模板层次结构的大部分内容都是一样的,然而在模板声明之后,对类而言便显示出了根本性的差异。为了创建类模板,在模板参数表之后,应有类声明。在类中可以像使用其他类型(如int或double)那样使用模板参数。例如,可以把模板参数用做数据成员,返回类型的成员函数或成员函数的参数等。 ?? 【例8.1】使用类模板的实例。 template class T //带参数T的模板声明 //可用typename代替class class TAnyTemp { T x,y; //类型为T的私有数据对象 public: TAnyTemp( T X, T Y) : x(X), y(Y) { } //类构造函数 T getx( ) { return x; } //内联类成员函数,返回类型为T T gety( ) { return y; } //内联类成员函数,返回类型为T }; 类模板TAnyTemp声明了两个私有数据成员,即类型都为T的数据成员x和y,一旦使用类模板,它就可以保存被指定类型的两个值。类模板声明的一般方法如下: template 类模板参数class 类名{//类体}; 2. 类模板的对象 类模板也称为参数化类型。初始化类模板时,传给它具体的数据类型,就产生了模板类。使用模板类时,编译器自动产生处理具体数据类型的所有成员(数据成员和成员函数)。如使用上述模板定义对象iObject,并以int 替换参数T: TAnyTempintiObject(321,556); int告诉编译器从模板产生一个类,并用int替换所有的参数T,所产生的类的名字变成TAnyTempint,定义的对象名为iObject。两个整型值321和556传递给对象的构造函数以初始化该对象的私有数据对象。 所产生类的全名是TAnyTempint,这包括尖括号和int数据类型。可以从这个模板再产生一个实例: TAnyTempdoubledObject(3.1416,5.1552); 对象dObject能保存两个double值,这是因为又产生一个实例TAnyTempdouble,它是与前者毫无关系的类,相同之处只是都产生于同一个模板。 只要赋给模板一种实际的数据类型,就会产生新的类,而且以特定类型替代模板参数。定义对象的一般格式如下: 类名模板实例化参数类型对象名(构造函数实参列表); 类名模板实例化参数类型对象名; //默认或者无参 //数构造函数 模板实例化参数类型包括数据类型和值,参考【例8.3】的int,4等形式。编译器不能从构造函数列表推断出模板实例化参数类型,所以必须显式地给出它们的参数类型。 【例8.2】求4个数中最大值的类模板程序。 #include iostream using namespace std; templateclass T class Max4{ T a,b,c,d;
您可能关注的文档
最近下载
- 河北省保定市定州市2023-2024学年四年级下学期期末质量监测语文试题(word版有答案).docx VIP
- 外研版五年级上册英语Module6-01Unit1课件.ppt VIP
- 基于世界技能大赛技术规范的货运代理沉浸式模拟训练研究.pdf VIP
- 家居平面图设计方案介绍.pptx VIP
- 河北省保定市定州市2023-2024学年四年级下学期期末质量监测道德与法治试题(word版 有答案).docx VIP
- 螺旋离心泵设计.doc VIP
- 河北省保定市定州市2024-2025学年四年级上学期期中质量监测道德与法治试题(word版 有答案).docx VIP
- 6T厨房管理课件.pptx
- 每日听书《我有自己的宇宙》导读.pdf VIP
- 党支部书记素质能力大赛试题附答案.doc VIP
文档评论(0)