- 0
- 0
- 约2.47千字
- 约 14页
- 2017-08-19 发布于广东
- 举报
第九章 模板 9.1 ?函数模板 9.1.1函数模板引入 重载函数可以解决功能相同或相似的函数使用同一个函数名的问题。 例如: void swap(char x, char y) { char t =x; x = y; y = t; } void swap(int x, int y) { int t =x; x = y; y = t; } void swap(float x, float y) { float t =x; x = y; y = t; } 程序的代码数量并没有减少。可以减少代码吗?使用C++函数模板可以避免书写大量的代码。接下来我们学习函数模板定义。 9.1.2 函数模板的定义 函数模板的定义形式: template class T 类型名? 函数名(参数表) { ?????? 函数体 } 或 template typename T 类型名? 函数名(参数表) { ?????? 函数体 } 9.1.2 函数模板的定义 例9_1? 定义用于变量交换的函数模板。 程序运行结果如图 : 9.1.2 函数模板的定义 例 9_2? 插入排序函数模板,使用插入排序函数模板可以为不同数据类型的数组排序,如整型、字符型、实型等等,为了使程序具有通用性,设计函数模板InsertionSort()。 插入排序的基本思想:每一步将一个待排序的元素按其关键字值的大小插入到已排序序列的合适位置,直到待排序元素全部插入完为止。 程序运行结果如图 : 9.2 ??模板函数的覆盖 下列函数模板: template class T T max(T a, T b) { ?????? retum ab?a:b; } 对于简单的数据类型,如整型、实型、字符型数据,这个模板能够正常工作。 对于字符串,用上述模板就会出现问题,因为对于字符串,不能使用运算符“”,要为其编写独立的max()函数。 我们将函数模板生成的函数称为模板函数。如果某一函数的函数原型与函数模板生成的函数(模板函数)原型一致,称该函数为模板函数的覆盖函数。 9.2 ??模板函数的覆盖 例9_4? 模板函数的覆盖 template class T T max(T a, T b) { ?????? return ab?a:b; } char *max(char *x, char *y) { ?????? return strcmp(x, y) 0 ? x :y; } 9.3.1 类模板 下面的两个类: class A { ?? int i; public: ?? A(int a) {…} ?? void set (int b) ????? {……} ??????? … }; class B { ?? double i; public: ?? B(double a) {…} ?? void set (double b) ????? {……} ??????? … }; 这两个类的方法都一样,只是一个数据类型是整型,另一个数据类型是实型。可以使用类模板简化代码。 9.3.1 类模板 template class T class A { ?? T i; public: ?? A(T a) {…} ?? void set (T b) ????? {……} ??????? … }; 类模板也称为参数化的类,用于为类型相似的类定义一种通用模式。 9.3.2 类模板的定义 template 模板参数表 class 类模板名 { ?????? 成员声明 } 如果需要在类模板外定义类模板的成员函数,格式如下: template 模板参数表 类型 类模板名参数::函数名(参数表) { 函数体 } 使用类模板建立对象的语法如下: 类模板 实参表?? 对象1,对象2,…; 系统会根据实参的类型,生成一个类(称为模板类),然后建立该类的对象。即对模板实例化生成类,再对类实例化生成对象。 9.3.2 类模板的定义 例 9_5? 定义数组类的类模板,并利用成员函数对数组中的元素初始化。 程序运行结果如图 : 9.3.2 类模板的定义 函数模板不能定义缺省参数,而类模板却可以定义缺省参数。 例 9_6? 使用缺省参数定义数组的类模板 程序运行结果如图 : 9.4?? 程序举例 例9_7? 折半查找函数模板。 基本思想:对于已按关键字排序的序列,经过一次比较,可将序列分割成两部分,然后只在有可能包含待查元素的一部分中继续查找,并根据试探结果继续分割,逐步缩小查找范围,直至找到或找不到为止。 例如在下列数据中查找48: low=0?????? high=9?????????????? mid=4 ??????? 48a[4]??? low=5??? high=9??????? ?
您可能关注的文档
- Visual FoxPro数据库程序设计实训指导( 第二版) 高职计算机应用技术 焦凤红 实验4 数据库的基本操作.ppt
- Visual FoxPro数据库程序设计实训指导( 第二版) 高职计算机应用技术 焦凤红 实验5 结构化查询语言SQL.ppt
- Visual FoxPro数据库程序设计实训指导( 第二版) 高职计算机应用技术 焦凤红 实验6 查询与视图.ppt
- Visual FoxPro数据库程序设计实训指导( 第二版) 高职计算机应用技术 焦凤红 实验7 结构化程序设计初步.ppt
- Visual FoxPro数据库程序设计实训指导( 第二版) 高职计算机应用技术 焦凤红 实验8 表单设计.ppt
- Visual FoxPro数据库程序设计实训指导( 第二版) 高职计算机应用技术 焦凤红 实验9 类的设计与使用.ppt
- Visual FoxPro数据库程序设计实训指导( 第二版) 高职计算机应用技术 焦凤红 实验10 报表设计.ppt
- Visual FoxPro数据库程序设计实训指导( 第二版) 高职计算机应用技术 焦凤红 实验11 菜单与工具栏设计.ppt
- Visual FoxPro数据库程序设计实训指导( 第二版) 高职计算机应用技术 焦凤红 实验12 项目管理器的基本操作.ppt
- Visual FoxPro数据库及程序设计基础 第2版 教学课件 作者 周明红 1.ppt
原创力文档

文档评论(0)