版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、14:20:30,1,C+程序设计教程(第二版),第十四章 模板 Chapter 14 Template,清华大学出版社 钱 能,14:20:30,2,思考角度 C+程序是一些类型和函数,编程就是设计类型和函数,然后按C+的程序结构来组织 模板编程 世界上万事万物都具有相似性,许多类型和函数尽管处理的数据不同,但其行为也具有相似性,将相似的类型归为类型族以及相似的函数归为函数族的编程,就是模板编程 编程方法的侧重点 面向对象编程解决类体系中的不同对象行为表现 模板编程解决独立类之间的不同对象行为表现 多个独立类可以是多个类继承体系,因而,面向对象编程与模板编程是融合的,14:20:30,3,第
2、十四章内容,函数模板(Function Template) 函数模板参数(Function Template Parameter) 类模板(Class Template) 实例化与定做(Instantiation public: List(); void add(const T,14:20:30,15,与类定义相似,成员函数的定义一般放在类定义的外部,与类定义分开以有利于程序的组织放在模板类定义外部的成员函数的定义形式为:,template List:List():first(0),last(0) template void List:add(const T ,List构造函数,14:20:3
3、0,16,类模板(class template):侧重于模板的描述 (声明或定义),例如: Templateclass List;/类模板声明 template /类模板定义 class List Node *first, *last; public: List(); void add(const T,模板类(template class):侧重于模板的使用形式 例如: List /T为类型形参 List /Dog是类型实参 形如List形式的类,不管是形参还是实参,本书都称之为为模板类,14:20:30,17,高级模板概念中,类模板声明,如:Templateclass List等同于带有形式
4、类型参数的模板类,如:List并将其作为一种类型看待所以本质上不区分类模板与模板类,14:20:30,18,模板类的使用将直接透入对象的构造,因此,允许模板类带有值参便理所当然了templateclass bitset;但是类型值参将导致不同的类模板描述,因而决定了不同的值参值,生成不同的模板类bitset a;bitset b;a = b; / error值参值应为编译能识别的常量,值参多为整型.,14:20:30,19,4. 实例化与定做 ( Instantiation /产生实例化 List eList;/不再实例化 第一次用特定的类型实参使用模板函数时,将引起函数模板的实例化(产生函数
5、定义),14:20:30,20,实例化与实施的操作有关,构造对象所触发的实例化,只实例化其构造函数,不实例化类模板的其他成员函数但可以通过显式请求,强制整体实例化,template List;/实例化整个模板类 List dList;/实例化构造函数 dList.add(3.6);/实例化add成员 dList.add(5.8);/不再实例化,只是简单调用 List iList;/不再实例化 iList.add(5);/不再实例化,14:20:30,21,对于特定的类型实参,希望其行为不同于类模板所规定的操作,可以根据该实参来定做,定做的模板称为模板铸件(或称特制模板),如: template
6、 class List Node *first, *last; public: List(); void add(const Cat,14:20:30,22,模板铸件可为类,亦可为模板若为模板,则其定做称为局部定做,template class A . ; 局部定做1 template class A ; /A为模板 局部定做2 template class A ; /A为模板 使用时要注意: A dCat; /按A匹配 A dd;/按A匹配 A cCat; /错:A还是A?,14:20:30,23,5. 程序组织 ( Program Organization ),包含方式 模板使用的方式,不
7、但创建了模板函数定义或模板类定义,还实施了函数调用,或者创建了对象,实施了对象操作.因此,除了需要函数模板声明或类模板定义之外,还需要函数模板定义和类模板的实现.也就是说,任何使用模板之前,编译应该能够事先看到整个模板的说明.这就是包含方式的由来.,14:20:30,24,模板使用 /x.cpp #include”tlist.h” int main() List dList; dList.add(3.6); dList.print(); List iList; iList.add(5); iList.add(8); iList.print(); ,模板说明 / tlist.h #ifndef
8、TLIST #define TLIST template struct Node . ; template /类模板定义 class List . ; template /类模板成员函数实现 List:List():first(0),last(0) template void List:add(const T export template /类模板定义 class List . ; #endif / TLIST,模板使用(与包含方式同) /x.cpp #include”tlist.h” int main() List dList; dList.add(3.6); dList.print();
9、 List iList; iList.add(5); iList.add(8); iList.print(); ,14:20:30,27,6. 模板的多态 ( Template Polymorphism ),不同类型的对象,作相同名字的操作,却表现为不同的行为,便是多态 虚函数所表现的多态是基于类继承体系的,而模板的多态却适合于任何孤立的类 由对象捆绑同名操作,以求识别不同的行为,得等到运行过程中获得传递的对象之后动多态 由实例化模板类,进而创建对象,来规定对象的操作,便可以在对象创建中,确定对象未来将要进行捆绑的同名操作的行为静多态,14:20:30,28,静多态 class Dog; cl
10、ass Cat; template class List; template void fn(list/定义fn的重载函数 ,14:20:30,29,7. 高级编程 ( Advanced Programming ),静多态无须动态联编,而同样可以实现多态 / application1.cpp #include”interfacetv.h” Template void operating(TV ,/ interfacetv.h #ifndef HEADER_INTERFACETV #define HEADER_INTERFACETV template class InterfaceTV TV t
11、v; public: void adjustVolume() tv.adjustVolume(); void switchChannel() tv.switchChannel(); ; #endif / HEADER_INTERFACETV,14:20:30,30,抽象编程代码 / application2.cpp #include”interfacetv.h” #include”sony.h” #include”natinal.h” void f() InterfaceTV ts; ts.operating(); InterfaceTV tn; tn.operating(); ,sony类定义与实现代码 / sony.h / sony.cpp National类定义与实现代码 / national.h / national.cpp,14:20:30,3
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026届湖北省重点中学中考押题生物预测卷含解析
- 2026年新学期学科培训心得体会核心要点
- 2026年影像医师定期考核通关题库(考试直接用)附答案详解
- 2026年水处理考核多选题题库试题附答案详解【培优B卷】
- 2026年高等职业教育知识押题宝典试题附参考答案详解【综合卷】
- 2026年一级建造师之一建民航机场工程实务题库附参考答案详解【能力提升】
- 2026年中医妇科学(中级)模拟卷包及参考答案详解(综合卷)
- 2025年物流管理与运输体系知识考试试卷及答案
- 2025年小学语文教师知识素养测试题(附答案)
- 组织行为学精要解析
- 腰椎病中医护理贴敷应用
- 四川省四川省地质大数据中心2024年公开考核招聘工作人员笔试历年参考题库典型考点附带答案详解
- 4.1版本YJK抗震性能化设计专题-牟善鑫
- 2026年男朋友渣男测试题及答案
- 物业防汛培训课件
- 工程建设标准强制性条文(房屋建筑部分)
- 2026年主题教育活动问题清单及整改措施
- 建筑与小区雨水控制及利用工程技术规范
- SPD项目介绍教学课件
- 安全教育培训考核制度
- 2026年华为法务专员面试题集与答案
评论
0/150
提交评论