第26讲 模板

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

TheLecturer:姚雅鹃E-mail:kareny@mail.hzau.edu.cn第二十六讲模板函数模板类模板引例voidswap(int&a,int&b){intt;t=a;a=b;b=t;}voidswap(char&a,char&b){……}voidswap(double&a,double&b){……}一、函数模板若某些函数的实现代码完全相同,只是数据类型不同,则可设计一个通用函数,该函数使用通用数据类型参数。该函数称为函数模板。由函数模板生成的函数称为模板函数P290一、函数模板定义格式:templateclassT1,classT2,...,classTn函数定义n0,Ti表示通用类型,在函数的调用过程中,Ti被具体化。说明1°可用Ti来定义函数值、形参及局部变量2°T1~Tn需全部在形参表中使用3°如果存在非模板型重载函数,则优先与重载函数匹配一、函数模板#includeiostream.h#includestring.htemplateclassTvoidswap(T&x,T&y)//函数模板,交换两个变量的值{Tt;t=x;x=y;y=t;}e.g.26_1交换两个数据的值。voidswap(char*c1,char*c2)//交换两个字符串的值{char*c;c=newchar[strlen(c1)+1];strcpy(c,c1);strcpy(c1,c2);strcpy(c2,c);delete[]c;}voidmain(){intx=13,y=23;doublex1=10.1,y1=20.2;charc1[11]=abcd,c2[11]=ok;swap(x,y);//匹配函数模板coutx,yendl;swap(x1,y1);//匹配函数模板coutx1,y1endl;swap(c1,c2);//匹配重载函数coutc1,c2endl;}二、类模板数据成员变成另外一种数据类型,或者干脆是一个类的对象,又要重新拷贝,重新进行修改。这样不仅程序的代码数量急剧增加,修改过程中也很容易出现各种疏漏。用一种类似函数模板的机制来结决问题——类模板。P292定义格式:templateclassT1,classT2,...,classTn类定义n0,Ti表示通用类型,在创建对象时,Ti具体化。定义对象的格式:类名类型实参对象名1,……对象名n;类型实参二、类模板成员函数类外定义格式:templateclassT1,classT2,...,classTn函数类型名类名T1,T2,...,Tn::函数名(形参表){......}T1,T2,...,Tne.g.26_2栈类模板。……a1a2an进栈出栈栈底栈顶LastInFirstOuttop栈空a1a2a6a3a4a5a1a2a6a3a4a5top栈满#includeiostream#includecstdlibusingnamespacestd;templateclassTclassCStack//类模板{private:intsize;//栈的大小inttop;//指示栈元素T*pStack;//指向栈public:CStack(intsize_t=10);//构造函数~CStack();//析构函数boolEmpty();//判断栈空boolFull();//判断栈满voidPush(constT&);//元素进栈T&Pop();//元素出栈voidClear();//清空栈T&GetTop();//查询栈顶元素};templateclassTCStackT::CStack(intsize_t)//构造函数{if(size_t0)size=size_t;elsesize=10;top=-1;pStack=newT[size];}templateclassTCStackT::~CStack()//析构函数{delete[]pStack;}templateclassTboolCStackT::Empty()//判断栈空{returntop==-1;}templateclassTboolCStackT::Full()//判断栈满{returntop==size-1;}templateclassTT&CStackT::GetTop()//查询栈顶元素{if(!Empty())returnpStack[top];elseexit(1);}templateclassTvoidCStackT::Clear()//清空栈{top=-1;}templateclassTvoidCStackT::Push(constT&value)//元素进栈{if(!Full())pStack[++top]=value;elseexit(1);}templateclassTT&CStackT::Pop()//元素出栈{if(!Empty()){top--;returnpStack[top+1];}elseexit(1);}voidmain(){CStackintintStack(5);//定义一个T为int的模板类对象inti,temp;for(i=0;i5;i++){coutPushelementsi+1instack:;cintemp;intStack.Push(temp);//元素进栈}while(!intStack.Empty()){temp=intStack.Pop();//元素出栈cout-tempendl;}}课后自学内容P277-27812.6、12.7P29713.3.1

1 / 17
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功