- 1
- 0
- 约5.24千字
- 约 26页
- 2017-02-12 发布于重庆
- 举报
06第6章模板与异常处理
高级程序设计语言 II 天津理工大学计算机与通信工程学院 主讲教师:孙世温 sunsw80@ 本章主要内容 模板的概念 函数模板 定义 实例化 类模板 定义 实例化 继承 本章小结 模板的概念 函数模板 定义 实例化 类模板 定义 实例化 继承 第6章 模板与异常处理 学时:1+1 模板的基本思想: 实际应用中,一些函数的功能相同,唯一的区别只在于处理对象的数据类型不同,若用函数重载实现,则需编写多个函数: 例:int max(int i, int j) { return ij?i:j; } float max(float i, float j) { return ij?i:j; } 编程时只提供一套实现该功能的程序实体,然后将数据类型作为参数传递,这就是类属机制的思想 模板具有模板形式参数:将数据类型作为模板的参数,参数化的数据类型就是形式类属参数 模板须经过实例化后才能使用:实例化是指用某一具体数据类型替代模板中的形式参数的过程,该确定的数据类型称为实际参数。 C++语言的模板 函数模板 函数的形式参数表中某些形式参数的数据类型被参数化 函数模板本身不是函数,经实例化后才得到函数 C++语言的模板 类模板 类的数据成员的类型或成员函数的形参类型被参数化 类属类也不是类,经实例化后才得到具体的类 §6.2 函数模板 一般形式: template class 类属参数1, class 类属参数2, … 函数类型 函数名(形参表) { 函数体… } 例: template class TYPE TYPE max(TYPE x, TYPE y) { return (x y) ? x : y; } 函数模板定义时应注意的问题 在函数模板定义template中给出的每一个形式类属参数都必须出现在函数形参表中 如: template class T1, class T2 void fun(T1 x, T2 y) { …… } 错误的用法 template class TYPE template class TYPE TYPE* func() void func() { ……} { TYPE obj; …… } 对于类模板的成员函数则不做此项要求 函数模板的实例化 由编译系统根据函数调用的实际参数类型自动完成函数模板的实例化,不须显式实例化 template class TYPE TYPE max(TYPE x, TYPE y) { return (x y) ? x : y; } void main( ) { MY_CLASS obj1, obj2; max(10, 5); // 用整型实例化 max(obj1, obj2); // 用MY_CLASS实例化 } 调用类属函数时,应保证函数的实参类型与形式类属参数完全匹配,因为函数模板在实例化过程中不做任何类型转换 例:已知函数模板max的两个形参都是形式类属参数TYPE类型的,则以下两个应用错误 max(10, 10.5); 一个实参是整型,另一个是double型,类型不同 max(10, obj1); 一个实参是整型,另一个是MY_CLASS类型 都无法实例化 二、模板函数的重载例: #include iostream.h template class TYPE TYPE max(TYPE x, TYPE y) { return (x=y)?x:y; } template class TYPE TYPE max(TYPE x, TYPE y, TYPE z) { TYPE w = (x=y)?x:y ; return (w=z)?w:z; } template class TYPE TYPE max(TYPE x[], int n) { TYPE m = x[0]; for (int i=0; in; i++) if (mx[i]) m = x[i]; return m; } void main() { float m, x=56, y=-55.8, z=99.1; int data[10] = {1,3,15,7,9,22,4,26,8,10}; m = max(x, y); // TYPE被实例化为float m = max(x,y,z); int t = max(data, 10); } 在引入模板函数后,确定调用函数的哪个版本所遵循的匹配原则: (1)如果某一普通函数的形参类型正好与函数调用的实际参数类型匹配,则调用该函数。否则, (2)如果能从同名的模板函数实例化
您可能关注的文档
- 06新生儿黄疸的新认识.ppt
- 06方差分析.ppt
- 06无侧限抗压强度试验.ppt
- 06有机物的电解制备.ppt
- 06机制农机材料力学试卷A.doc
- 06构造正交异性桥面板分析.ppt
- 06正弦稳态电路的分析.ppt
- 06污水COD(快速测定仪法).doc
- 06测验分数的意义与解释.ppt
- 06液相色谱的定性及定量技术.ppt
- 数字化赋能:新一代分米波治疗仪的创新与突破.docx
- 喷射BFRP加固震损混凝土框架T形梁板的抗震性能研究:实验、分析与展望.docx
- 有机双稳态记忆器件电学特性的深度剖析与机制探究.docx
- 论网络虚拟财产的法律性质及其保护路径:基于司法实践与理论的双重审视.docx
- 友好仲裁实体法律适用:理论、实践与展望.docx
- 汉字简繁之争网络舆情:多维度剖析与应对策略.docx
- 因病致贫人群社会资本精准测量及其对卫生服务利用的影响机制探究.docx
- 显隐之间:博鳌亚洲论坛主旨演讲汉英口译策略剖析.docx
- 从《金瓶梅》到《歧路灯》:家庭小说的传承与变奏.docx
- 双_多中心手性salen Ti(Ⅳ)催化剂:硫醚不对称氧化反应的协同催化机制与性能优化.docx
原创力文档

文档评论(0)