第9章多态性 9.1函数模板 9.2模板函数的覆盖 9.3类模板
第9章 多态性 9.1 函数模板 9.2 模板函数的覆盖 9.3 类模板
第9章模板 9.1函数模板 1问题的提出 重载函数可以解决功能相同或相似的函数使用同一个函数名 的问题。 void swap(char &x, char &y) void swap(float &x, float &y) char t=x: float t =x; y X t; y= t; void swap(int &x, int &y) intt=x. 实际代码量并未 减少。可使用函数模 X=y, 板减少大量代码。 =t;
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; } 第9章 模板 void swap(float &x, float &y) { float t =x; x = y; y = t; } 实际代码量并未 减少。可使用函数模 板减少大量代码
第9章模板 9.1函数模板 2.函数模板的定义 template <class t> 或 template <typename T> 类型名函数名(参数表) 类型名函数名(参数表) 函数体 函数体 函数模板就像是一个带有类型参数的函数(参数T即为类型), 编译程序会根据实际参数的类型确定参数的类型
9.1 函数模板 2. 函数模板的定义 template <class T> 或 类型名 函数名(参数表) { 函数体 } 函数模板就像是一个带有类型参数的函数(参数T即为类型), 编译程序会根据实际参数的类型确定参数的类型。 第9章 模板 template <typename T> 类型名 函数名(参数表) { 函数体 }
第9章模板 例9.1定义用于变量交换的函数模板 include <iostream. h> template <class T> void swap(T &x, T&y) T temp=x: X y=temp void main ( void) T本身是一个类型参数,在调用函 char a=A, b=B 数swap()时,编译程序会根据 intc=123,d=456; 实际参数的类型确定T的类型。 double x=12.3, y=45.6 swap(a, b); swap(c, d); swap(x, y) 程序运行结果为: cout <s a<<"<< b<< end: BA cout <<c<<<<d<< end: cout≤x<","≤<y<<endl; 456.123 45.6.12.3
例9.1 定义用于变量交换的函数模板 #include <iostream.h> template <class T> void swap(T &x, T &y) { T temp=x; x=y; y=temp; } void main(void) { char a='A', b='B'; int c=123, d=456; double x=12.3, y=45.6; swap(a, b); swap(c, d); swap(x, y); cout << a << "," << b << endl; cout << c << "," << d << endl; cout << x << "," << y << endl; } 第9章 模板 程序运行结果为: B, A 456, 123 45.6, 12.3 T本身是一个类型参数,在调用函 数swap()时,编译程序会根据 实际参数的类型确定T的类型
第9章模板 例9.2插入排序函数模板,使用插入排序函数模板可以为不 同数据类型的数组排序,如整型、字符型、实型等等,为了使 程序具有通用性,设计函数模板 Insertion Sort()。 插入排序的基本思想:每一步将一个待排序的元素按其关键字值的大小 插入到已排序序列的合适位置,直到待排序元素全部插入完为止。 a[0] 2→2 a[1] [2] a[3] 85243 8243 5843 24583 23458 a[4]
例9.2 插入排序函数模板,使用插入排序函数模板可以为不 同数据类型的数组排序,如整型、字符型、实型等等,为了使 程序具有通用性,设计函数模板InsertionSort()。 插入排序的基本思想:每一步将一个待排序的元素按其关键字值的大小 插入到已排序序列的合适位置,直到待排序元素全部插入完为止。 第9章 模板