您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 面向对象程序设计(C++)-第九章_函数模板和类模板
1函数模板和类模板2函数的重载两个以上的函数,具有相同的函数名,但是形参的个数或者类型不同,编译器根据不同特点,自动确定调用相应的函数,这就是函数的重载。3重载函数的声明例:形参类型不同intadd(intx,inty);floatadd(floatx,floaty);形参个数不同intadd(intx,inty);intadd(intx,inty,intz);4举例求三个数中最大的数此例子中传递的参数的数据类型不一样,但个数相同//求三个数中最大的数#includeiostreamusingnamespacestd;intmax(inta,intb,intc){if(ba)a=b;if(ca)a=c;returna;}floatmax(floata,floatb,floatc){if(ba)a=b;if(ca)a=c;returna;}longmax(longa,longb,longc){if(ba)a=b;if(ca)a=c;returna;}voidmain(){inta,b,c;floatd,e,f;longg,h,i;cinabc;cindef;cinghi;intm;m=max(a,b,c);floatn;n=max(d,e,f);longp;p=max(g,h,i);coutmax_i=mendl;coutmax_f=nendl;coutmax_p=pendl;}646511.316.418.5111122223333max_i=6max_f=18.5max_p=3333Pressanykeytocontinue78函数模板函数的重载可以实现一个函数名多用,将实现相同的或类似功能的函数用同一个函数名来定义。缺点:在程序中要分别定义和实现每一个函数,代码较多解决办法:函数模版(functiontemplate)9函数模版(functiontemplate)实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。这个通用函数就称为函数模板。函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只要在模板中定义一次即可。10函数模板的定义形式templatetypename虚拟类型参数或templateclass虚拟类型参数11举例#includeiostreamusingnamespacestd;templatetypenameTTmax(Ta,Tb,Tc){if(ba)a=b;if(ca)a=c;returna;}12voidmain(){inti1=1,i2=2,i3=3,i;doubled1=3.2,d2=6.3,d3=4.8,d;longl1=35463,l2=21345,l3=12345,l;i=max(i1,i2,i3);d=max(d1,d2,d3);l=max(l1,l2,l3);coutiendl;coutdendl;coutlendl;}1314结论函数模板比函数重载更方便,程序更简洁。但它只适用于函数的参数个数相同而类型不同,且函数体相同的情况,如果参数的个数不同,则不能用函数模版。15类模板对于类的声明来说,也有同样的问题,如果两个或多个类,其功能是相同的,仅仅是数据类型不同,则可声明一个通用的类模板16#includeiostreamusingnamespacestd;classCompare_int{public:Compare_int(inta,intb){x=a;y=b;}intmax(){return(xy)?x:y;}intmin(){return(xy)?x:y;}private:intx,y;};17#includeiostreamusingnamespacestd;classCompare_float{public:Compare_float(inta,intb){x=a;y=b;}floatmax(){return(xy)?x:y;}floatmin(){return(xy)?x:y;}private:floatx,y;};18#includeiostreamusingnamespacestd;classCompare_char{public:Compare_char(inta,intb){x=a;y=b;}charmax(){return(xy)?x:y;}charmin(){return(xy)?x:y;}private:charx,y;};19类模板的声明和使用声明:templateclass虚拟类型参数或templatetypename虚拟类型参数使用:类名实际类型名对象名(实参列表);20#includeiostreamusingnamespacestd;templateclassTclassCompare{public:Compare(Ta,Tb){x=a;y=b;}Tmax(){return(xy)?x:y;}Tmin(){return(xy)?x:y;}private:Tx,y;};21voidmain(){Compareintcmp1(3,7);coutcmp1.max()endl;coutcmp1.min()endl;Comparefloatcmp2(3.1f,7.2f);coutcmp2.max()endl;coutcmp2.min()endl;Comparecharcmp3('a','A');coutcmp3.max()endl;coutcmp3.min()endl;}
本文标题:面向对象程序设计(C++)-第九章_函数模板和类模板
链接地址:https://www.777doc.com/doc-3261644 .html