第7章C程序设计教程与实验指导杨国兴模板.ppt
《第7章C程序设计教程与实验指导杨国兴模板.ppt》由会员分享,可在线阅读,更多相关《第7章C程序设计教程与实验指导杨国兴模板.ppt(26页珍藏版)》请在三一文库上搜索。
1、C+语言程序设计,杨国兴 张东玲 彭涛,中国水利水电出版社,第7章 模板,7.1 函数模板 7.2 模板函数的覆盖 7.3 类模板,7.1 函数模板,1. 问题的提出 重载函数可以解决功能相同或相似的函数使用同一个函数名的问题。 void swap(char ,第7章 模板,void swap(float ,实际代码量并未减少。可使用函数模板减少大量代码。,7.1 函数模板,2. 函数模板的定义 template 或 类型名 函数名(参数表) 函数体 函数模板就像是一个带有类型参数的函数(参数T即为类型),编译程序会根据实际参数的类型确定参数的类型。,第7章 模板,template 类型名 函
2、数名(参数表) 函数体 ,例7.1 定义用于变量交换的函数模板,#include using namespace std; template void swap(T ,第7章 模板,程序运行结果为: B, A 456, 123 45.6, 12.3,例7.2 插入排序函数模板,使用插入排序函数模板可以为不同数据类型的数组排序,如整型、字符型、实型等等,为了使程序具有通用性,设计函数模板InsertionSort()。,插入排序的基本思想:每一步将一个待排序的元素按其关键字值的大小插入到已排序序列的合适位置,直到待排序元素全部插入完为止。,第7章 模板,例7.2 (续一),template vo
3、id InsertionSort(T A, int n) int i, j; T temp; for (i = 1; i 0 ,第7章 模板,例7.2 (续二),#include using namespace std; void main() int a10=2,4,1,8,7,9,0,3,5,6; double b10=12.1, 24.2, 15.5, 81.7, 2.7, 5.9, 40.3, 33.3, 25.6, 4.6; InsertionSort(a,10); InsertionSort(b,10); cout a0 “ “ a1 “ “ a2 “ “ a3 “ “; cout
4、 a4 “ “ a5 “ “ a6 “ “ a7 “ “; cout a8 “ “ a9 endl; cout b0 “ “ b1 “ “ b2 “ “ b3 “ “; cout b4 “ “ b5 “ “ b6 “ “ b7 “ “; cout b8 “ “ b9 endl; ,第7章 模板,程序运行结果为: 0 1 2 3 4 5 6 7 8 9 2.7 4.6 5.9 12.1 15.5 24.2 25.6 33.3 40.3 81.7,例7.3 使用函数模板产生的二意性,#include using namespace std; template T max(T a, T b) ret
5、urn ab?a:b; void main(void) int a = max(10.5, 20); double b = max(10, 20.6); cout a endl; cout b endl; ,第7章 模板,7.2 模板函数的覆盖,下列函数模板: template T max(T a, T b) retum ab?a:b; 对于简单的数据类型,如整型、实型、字符型数据,这个模板能够正常工作。对于字符串,用上述模板就会出现问题,因为对于字符串,不能使用运算符“”,要为其编写独立的max()函数。 我们将函数模板生成的函数称为模板函数。如果某一函数的函数原型与函数模板生成的函数(模板
6、函数)原型一致,称该函数为模板函数的覆盖函数。,第7章 模板,例7.4 模板函数的覆盖,#include #include using namespace std; template T max(T a, T b) return ab?a:b; char *max(char *x, char *y) return strcmp(x, y) 0 ? x :y; void main(void) char *p=“ABCD“, *q=“EFGH“; p=max(p, q); int a =max(10, 20); float b =max(10.5, 20.6); cout p endl; cout
7、 a endl; cout b endl; ,第7章 模板,程序运行结果为: EFGH 20 20.6,7.2 模板函数的覆盖,在进行函数调用时,编译程序采用如下策略确定调用哪个函数: (1)首先寻找一个实参与形参完全匹配的覆盖函数,如果找到,则调用该函数 (2)如果能通过函数模板生成实例函数,并且参数匹配,则调用该函数。 (3)通过强制类型转换,寻找能够与实参匹白的覆盖函数,或通过函数模板生成的实例函数、如果找到则调用该函数。 (4)如果所有努力失败,则给出出错信息。,第7章 模板,7.3 类模板,1. 问题的提出 class A int i; public: A(int a) void s
8、et (int b) ; class B double i; public: B(double a) void set (double b) ;,第7章 模板,这两个类的方法都一样,只是一个数据类型是整型,另一个数据类型是实型。可以使用类模板简化代码,类模板也称为参数化的类,用于为类型相似的类定义一种通用模式,7.3 类模板,2. 类模板的定义 template class 类模板名 成员声明 如果需要在类模板外定义类模板的成员函数,格式如下: template 类型 类模板名:函数名(参数表) 函数体 ,第7章 模板,7.3 类模板,2. 类模板的定义(续) 使用类模板建立对象的语法如下:
9、类模板 对象1,对象2,; 系统会根据实参的类型,生成一个类(称为模板类),然后建立该类的对象。即对模板实例化生成类,再对类实例化生成对象。,第7章 模板,例7.5 定义数组类的类模板,并利用成员函数对数组中的元素初始化。,#include using namespace std; template class myArray public: myArray(int nSize,T InitVal); myArray() delete m_pArray; T ,第7章 模板,例7.5 (续一),template myArray:myArray(int nSize,T InitVal) m_nS
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 教程 实验 指导 杨国兴 模板
链接地址:https://www.31doc.com/p-3374242.html