第14章模板 模饭( emplate)是C++语言代码重用和多态性的一个集中 表现。模板是提供这样一个转换机制:由程序员定义一种操作 或一个类,而该操作或类却可以适应几乎所有的数据类型。在 定意义上,模板类似宏定义或函数重载,但它书定更为简洁, 使用更加灵活,适应性更强。 模板分函数模板和类模板。前者为程序员编写通用函数提供了 种手段;而后者则为程序员设计通用类奠定了基础
第14章 模板 模板(Template)是 C++ 语言代码重用和多态性的一个集中 表现。模板是提供这样一个转换机制:由程序员定义一种操作 或一个类,而该操作或类却可以适应几乎所有的数据类型。在 一定意义上,模板类似宏定义或函数重载,但它书定更为简洁, 使用更加灵活,适应性更强。 模板分函数模板和类模板。前者为程序员编写通用函数提供了 一种手段;而后者则为程序员设计通用类奠定了基础
141函数模板 14.1.1定义模板函数 利用函数模板定义的函数叫做模板函数,定义模板函数应具有 以下的一般形式 template<class T> type Function Name(arg list) ∥ Function Body 其中:关键字 template指出下面将要说明的是一个模板;而 < class T>则是该函数所要求的参数,这里的cass与类无关, 而是与参数名T一起指出:“这是一个用户定义的数据类 型”,它与一对尖括号是模板语法的组成部分
14.1 函数模板 14.1.1 定义模板函数 利用函数模板定义的函数叫做模板函数,定义模板函数应具有 以下的一般形式: template<class T> type Function_Name(arg_list) { // Function_Body; } 其中:关键字 template 指出下面将要说明的是一个模板;而 <class T> 则是该函数所要求的参数,这里的 class 与类无关, 而是与参数名 T 一起指出:“这是一个用户定义的数据类 型”,它与一对尖括号是模板语法的组成部分
例:定义模板函数 ∥/ MAXMIN. H template<class T> T Max(T a, T b) return(a>b)? a: b: template<class T> T Min(T a, T b) return(a <b)?a: b:
例:定义模板函数 // MAXMIN.H template<class T> T Max(T a, T b) { return (a > b) ? a : b; } template<class T> T Min(T a, T b) { return (a < b) ? a : b; }
定义模板函数时应注意 1.在模板的参数表中,至少得有一个参数的数据类型为模板 的参数类型T;模板函数的返回值的数据类型也可以为T。 2.模板可以带有多个不同数据类型的参数,比如 template<class T1, class T2, class T3> int f(T1 arg1, T2 arg2, T3 arg3 3.模板参数的数据类型也可以是已存在的数据类型,比如 template<class T, int n> T f(T arg) int i= n
定义模板函数时应注意: 1. 在模板的参数表中,至少得有一个参数的数据类型为模板 的参数类型 T;模板函数的返回值的数据类型也可以为 T。 2. 模板可以带有多个不同数据类型的参数,比如: template<class T1, class T2, class T3> int f(T1 arg1, T2 arg2, T3 arg3) { //… } 3. 模板参数的数据类型也可以是已存在的数据类型,比如: template<class T, int n> T f(T arg) { int i = n; //… }
4.函数可以带有模板中未给出的、已存在的数据类型的参数, 比如: template<class T> T f(T arg, int n) 5.模板函数的函数体中必须使用模板参数
4. 函数可以带有模板中未给出的、已存在的数据类型的参数, 比如: template<class T> T f(T arg, int n) { //… } 5. 模板函数的函数体中必须使用模板参数