您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > C++程序设计基础(第5版)(上)周霭如【10 模板】
华南理工大学计算机学院周霭如2016华南理工大学计算机学院周霭如2016第10章模板模板把函数或类要处理的数据类型参数化,表现为参数的多态性,称为类属。模板用于表达逻辑结构相同,但具体数据元素类型不同的数据对象的通用行为。华南理工大学计算机学院周霭如2016第10章模板10.1什么是模板10.2函数模板10.3类模板小结华南理工大学计算机学院周霭如201610.1什么是模板类属——类型参数化,又称参数模板使得程序(算法)可以从逻辑功能上抽象,把被处理的对象(数据)类型作为参数传递C++提供两种模板机制:函数模板类模板华南理工大学计算机学院周霭如201610.1什么是模板模板(函数模板和类模板)模板函数模板类对象模板、类、对象和函数华南理工大学计算机学院周霭如2016华南理工大学计算机学院周霭如201610.2函数模板考虑求两参数之中大值函数:max(a,b)对a,b的不同类型,都有相同的处理形式:return(ab)?a:b;用已有方法解决对不同数据类型处理:(1)宏替换#definemax(a,b)(ab?a:b)问题避开类型检查(2)重载问题需要许多重载版本(3)使用函数模板华南理工大学计算机学院周霭如201610.2函数模板重载函数通常基于不同的数据类型实现类似的操作对不同数据类型的操作完全相同,用函数模板实现更为简洁方便华南理工大学计算机学院周霭如201610.2.1模板说明template类型形式参数表声明模板中使用的类属参数。形式为10.2.1模板说明华南理工大学计算机学院周霭如201610.2.1模板说明template类型形式参数表声明模板中使用的类属参数。形式为关键字10.2.1模板说明华南理工大学计算机学院周霭如201610.2.1模板说明template类型形式参数表类型形式参数的形式为:typenameT1,typenameT2,……,typenameTn或classT1,classT2,……,classTn声明模板中使用的类属参数。形式为10.2.1模板说明华南理工大学计算机学院周霭如2016类型形式参数的形式为:typenameT1,typenameT2,……,typenameTn或classT1,classT2,……,classTn10.2.1模板说明template类型形式参数表声明模板中使用的类属参数。形式为关键字10.2.1模板说明华南理工大学计算机学院周霭如2016类型形式参数的形式为:typenameT1,typenameT2,……,typenameTn或classT1,classT2,……,classTn10.2.1模板说明template类型形式参数表声明模板中使用的类属参数。形式为类属参数10.2.1模板说明华南理工大学计算机学院周霭如2016templatetypenameTtemplatetypenameElementTypetemplatetypenameNameType,typenameDateType10.2.1模板说明template类型形式参数表声明模板中使用的类属参数。形式为例如10.2.1模板说明华南理工大学计算机学院周霭如201610.2.2函数模板与模板函数template类型形式参数表类型函数名(形式参数表){语句序列}函数模板声明函数模板定义由模板说明和函数定义组成模板说明的类属参数必须在函数定义中至少出现一次函数参数表中可以使用类属类型参数,也可以使用一般类型参数10.2.2函数模板与模板函数华南理工大学计算机学院周霭如2016#includeiostreamusingnamespacestd;templatetypenameTTMax(constTa,constTb){returnab?a:b;}intmain(){coutMax(3,5)isMax(3,5)endl;coutMax('y','e')isMax('y','e')endl;coutMax(10.3,0.5)isMax(10.3,0.5)endl;}例10-1简单函数模板应用10.2.2函数模板与模板函数华南理工大学计算机学院周霭如2016函数模板10.2.2函数模板与模板函数例10-1简单函数模板应用#includeiostreamusingnamespacestd;templatetypenameTTMax(constTa,constTb){returnab?a:b;}intmain(){coutMax(3,5)isMax(3,5)endl;coutMax('y','e')isMax('y','e')endl;coutMax(10.3,0.5)isMax(10.3,0.5)endl;}华南理工大学计算机学院周霭如2016#includeiostreamusingnamespacestd;templatetypenameTTMax(constTa,constTb){returnab?a:b;}intmain(){coutMax(3,5)isMax(3,5)endl;coutMax('y','e')isMax('y','e')endl;coutMax(10.3,0.5)isMax(10.3,0.5)endl;}intmax(inta,intb){returnab?a:b;}由实参类型实例化10.2.2函数模板与模板函数例10-1简单函数模板应用华南理工大学计算机学院周霭如2016#includeiostreamusingnamespacestd;templatetypenameTTMax(constTa,constTb){returnab?a:b;}intmain(){coutMax(3,5)isMax(3,5)endl;coutMax('y','e')isMax('y','e')endl;coutMax(10.3,0.5)isMax(10.3,0.5)endl;}intmax(inta,intb){returnab?a:b;}由实参类型实例化charmax(chara,charb){returnab?a:b;}10.2.2函数模板与模板函数例10-1简单函数模板应用华南理工大学计算机学院周霭如2016#includeiostreamusingnamespacestd;templatetypenameTTMax(constTa,constTb){returnab?a:b;}intmain(){coutMax(3,5)isMax(3,5)endl;coutMax('y','e')isMax('y','e')endl;coutMax(10.3,0.5)isMax(10.3,0.5)endl;}intmax(inta,intb){returnab?a:b;}由实参类型实例化charmax(chara,charb){returnab?a:b;}doublemax(doublea,doubleb){returnab?a:b;}10.2.2函数模板与模板函数例10-1简单函数模板应用华南理工大学计算机学院周霭如2016#includeiostreamusingnamespacestd;templatetypenameTTMax(constTa,constTb){returnab?a:b;}intmain(){coutMax(3,5)isMax(3,5)endl;coutMax('y','e')isMax('y','e')endl;coutMax(10.3,0.5)isMax(10.3,0.5)endl;}intmax(inta,intb){returnab?a:b;}charmax(chara,charb){returnab?a:b;}doublemax(doublea,doubleb){returnab?a:b;}编译器生成的模板函数程序执行时匹配不同的版本10.2.2函数模板与模板函数例10-1简单函数模板应用华南理工大学计算机学院周霭如2016templatetypenameElementTypevoidSortBubble(ElementType*a,intsize){inti,work;ElementTypetemp;for(intpass=1;passsize;pass++){work=1;for(i=0;isize-pass;i++)if(a[i]a[i+1]){temp=a[i];a[i]=a[i+1];a[i+1]=temp;work=0;}if(work)break;}}例10-2冒泡排序法的函数模板10.2.2函数模板与模板函数华南理工大学计算机学院周霭如2016templatetypenameElementTypevoidSortBubble(ElementType*a,intsize){inti,work;ElementTypetemp;for(intpass=1;passsize;pass++){work=1;for(i=0;isize-pass;i++)if(a[i]a[i+1]){temp=a[i];a[i]=a[i+1];a[i+1]=temp;work=0;}if(work)break;}}模板声明10.2.2函数模板与模板函数例10-2冒泡排序法的函数模板华南理工大学计算机学院周霭如2016templatetypenameElementTypevoidSortBubble(ElementType*a,intsize){inti,work;ElementTypetemp;for(intpass=1;passsize;pass++){work=1;for(i=0;isize-pass;i++)if(a[i]a[i+1]){temp=a[i];a[i]=a[i+1];a[i+1]=temp;work=0;}if(work)break;}}类属参数10.2.2函数模板与模板函数例10-2冒泡排序法的函数模板华南理工大学计算机学院周霭如2016templatetypenameElementTypevoidSortBubble(ElementType*a,intsize){inti,work;ElementTypetemp;for(intpass=1;passsize;pass++){work=1;for(i=0;isize-pass;i++)if(a[i]a[i+1]){temp=a[i];a[i]=a[i+1];a[i+1]=temp;work=0;}if(work)break;}}普通类型参数10.2.2函数模板与模板函数例10-2冒泡排序法的函数模板华南理工大学计算机学院周霭如2016templatetypenameElementTypevoidSortBubble(ElementType*a,intsize){inti,work;ElementTypetemp;for(intpass=1;passsize;pass++){work=1;for(i=0;isize-pass;i++)if(a[i]a[i+1]){temp=a[i];a[i]=a[i+1];a[i+1]=temp;work=0;}if(work)break;}}类属类型变量10.2.2函数模板与模板函数例10-2冒泡排序法的函数模板华南理工大学计算机学院周霭如2016templatetypenameElementTypevoidSortBubble(ElementType*a,intsize){inti,work;ElementTypetemp;for(intpass=1;passsi
本文标题:C++程序设计基础(第5版)(上)周霭如【10 模板】
链接地址:https://www.777doc.com/doc-3205149 .html