欢迎来到天天文库
浏览记录
ID:50065569
大小:117.00 KB
页数:16页
时间:2020-03-08
《程序设计基础——C++ 教学课件 作者 刘玉英 第10讲 模板.ppt》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、10.1函数模板10.2类模板第10讲模板模板是C++支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数、返回值取得任意类型。由于C++语言的程序结构主要由函数和类构成的,因此,模板也具有两种形式:函数模板类模板模板是一种将数据类型参数化的工具,是C++语言的一个重要特征。10.1函数模板10.1.1为什么引进函数模板?引进函数模板可以解决函数重载问题,减少代码的书写。案例1利用重载函数求绝对值:#include#includeintf(inti){ret
2、urni>0?i:-i;}//函数重载longintf(longinti){returni>0?i:-i;}//函数重载doublef(floati){returni>0?i:-i;}//函数重载voidmain(){inta;longintb;floatc;//声明变量cin>>a>>b>>c;cout<<"整型:"<#includeclassABS//求绝对值{public:intf(inti){returnabs
3、(i);}//函数重载longintf(longinti){returnlabs(i);}//函数重载doublef(floati){returnfabs(i);}//函数重载};voidmain(){ABSn;//声明对象inta;longintb;floatc;//声明变量cin>>a>>b>>c;cout<<"整型:"<Tabs(Tvalue){returnvalue>0?value:-value;}方
4、法三利用函数模板,求绝对值的函数只要声明一个函数模板:voidmain(){inta;longintb;floatc;//声明变量cin>>a>>b>>c;cout<<"整型:"<5、支持不同的函数参数和返回值,达到减少代码书写量的目的。函数模板的定义形式如下:template返回值类型函数名(参数表){函数体}类型形参T代表在函数模板中要使用的通用类型,在该函数的调用过程中,T被实参的类型具体化。10.1.2函数模板的定义与使用关键词class或typename与T一起说明用户定义的数据类型函数模板实际上是定义了一类函数,对有些参数或数据成员的数据类型并不具体指定,而是作为模板的参数。等到使用模板时再根据实参的数据类型来确定模板参数的类型,得到模板的实例,称为模板的实例化。例如:template6、Tabs(Tvalue){returnvalue>0?value:-value;}若使用模板时:abs(5);//将模板参数的类型实例化为整型abs(-3.8);//将模板参数的类型实例化为实型函数模板实例化后生成的函数称为模板函数。在程序中可用不同类型的实参来调用同一个函数,减少了代码的书写。#include"iostream.h"template//函数模板(两数交换)voidswap(T&x,T&y){Ttemp=x;x=y;y=temp;}template//函数模板(冒泡排序)voidsort(T*v,intn)7、//参数中有参数化类型的参数,也有普通类型的参数{for(inti=1;iv[j+1])swap(v[j],v[j+1]);//调用函数模板实例化后生成的模板函数}案例2编写冒泡排序的函数模板并实现排序。template//print函数模板(显示输出)voidprint(T*v,intn){for(inti=0;i8、33,55,77};cout<<"排序前:";print(a,10);sort(
5、支持不同的函数参数和返回值,达到减少代码书写量的目的。函数模板的定义形式如下:template返回值类型函数名(参数表){函数体}类型形参T代表在函数模板中要使用的通用类型,在该函数的调用过程中,T被实参的类型具体化。10.1.2函数模板的定义与使用关键词class或typename与T一起说明用户定义的数据类型函数模板实际上是定义了一类函数,对有些参数或数据成员的数据类型并不具体指定,而是作为模板的参数。等到使用模板时再根据实参的数据类型来确定模板参数的类型,得到模板的实例,称为模板的实例化。例如:template
6、Tabs(Tvalue){returnvalue>0?value:-value;}若使用模板时:abs(5);//将模板参数的类型实例化为整型abs(-3.8);//将模板参数的类型实例化为实型函数模板实例化后生成的函数称为模板函数。在程序中可用不同类型的实参来调用同一个函数,减少了代码的书写。#include"iostream.h"template//函数模板(两数交换)voidswap(T&x,T&y){Ttemp=x;x=y;y=temp;}template//函数模板(冒泡排序)voidsort(T*v,intn)
7、//参数中有参数化类型的参数,也有普通类型的参数{for(inti=1;iv[j+1])swap(v[j],v[j+1]);//调用函数模板实例化后生成的模板函数}案例2编写冒泡排序的函数模板并实现排序。template//print函数模板(显示输出)voidprint(T*v,intn){for(inti=0;i8、33,55,77};cout<<"排序前:";print(a,10);sort(
8、33,55,77};cout<<"排序前:";print(a,10);sort(
此文档下载收益归作者所有