您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > C++习题与解析-模板
01.分析以下程序的执行结果#includeiostream.htemplateclassTTmax(Tx,Ty){return(xy?x:y);}voidmain(){coutmax(2,5),max(3.5,2.8)endl;}解:本题说明函数模板的使用方法。max()函数是一个函数模板,它返回两个参数中的较大者。在调用时自动联编相应的max()函数。所以输出为:5,3.5注重:T为类型形式参数,可包含基本数据类型,也可以包含类类型,不能是普通的数据变量。-------------------------------------------------------02.分析以下程序的执行结果#includeiostream.htemplateclassTclassSample{Tn;public:Sample(Ti){n=i;}voidoperator++();voiddisp(){coutn=nendl;}};templateclassTvoidSampleT::operator++(){n+=1;//不能用n++;因为double型不能用++}voidmain(){Samplechars('a');s++;s.disp();}解:本题说明类模板的使用方法。Sample是一个类模板,由它产生模板类Samplechar,通过构造函数给n赋初值,通过重载++运算符使n增1,这里n由'a'增1变成'b'。所以输出为:n=b-------------------------------------------------------03.编写一个对具有n个元素的数组x[]求最大值的程序,要求将求最大值的函数设计成函数模板。解:将max()函数设计成一个函数模板。本题程序如下:#includeiostream.htemplateclassTTmax(Tx[],intn){inti;Tmaxv=x[0];for(i=1;in;i++)if(maxvx[i])maxv=x[i];returnmaxv;}voidmain(){inta[]={4,5,2,8,9,3};doubleb[]={3.5,6.7,2,5.2,9.2};couta数组最大值:max(a,6)endl;coutb数组最大值:max(b,5)endl;}本程序的执行结果如下:a数组最大值:9b数组最大值:9.2-------------------------------------------------04.编写一个使用类模板对数组进行排序、查找和求元素和的程序。解:设计一个类模板templateclassTclassArray,用于对T类型的数组进行排序、查找和求元素和,然后由此产生模板类Arrayint和Arraydouble。本题程序如下:#includeiostream.h#includeiomanip.htemplateclassTclassArray{T*set;intn;public:Array(T*data,inti){set=data;n=i;}~Array(){}voidsort();//排序intseek(Tkey);//查找指定的元素Tsum();//求和voiddisp();//显示所有的元素};templateclassTvoidArrayT::sort(){inti,j;Ttemp;for(i=1;in;i++)for(j=n-1;j=i;j--)if(set[j-1]set[j]){temp=set[j-1];set[j-1]=set[j];set[j]=temp;}}templateclassTintArrayT::seek(Tkey){inti;for(i=0;in;i++)if(set[i]==key)returni;return-1;}templateclassTTArrayT::sum(){Ts=0;inti;for(i=0;in;i++)s+=set[i];returns;}templateclassTvoidArrayT::disp(){inti;for(i=0;in;i++)coutset[i];coutendl;}voidmain(){inta[]={6,3,8,1,9,4,7,5,2};doubleb[]={2.3,6.1,1.5,8.4,6.7,3.8};Arrayintarr1(a,9);Arraydoublearr2(b,6);coutarr1:endl;cout原序列:;arr1.disp();cout8在arr1中的位置:arr1.seek(8)endl;arr1.sort();cout排序后:;arr1.disp();coutarr2:endl;cout原序列:;arr2.disp();cout8.4在arr2中的位置:arr2.seek(8.4)endl;arr2.sort();cout排序后:;arr2.disp();}本程序的执行结果如下:arr1:原序列:6381947528在arr1中的位置:2排序后:123456789arr2:原序列:2.36.11.58.46.73.88.4在arr2中的位置:3排序后:1.52.33.86.16.78.4题1.分析以下程序的执行结果#includeiostream.htemplateclassTTabs(Tx){return(x0?x:-x);}voidmain(){coutabs(-3),abs(-2.6)endl;}解:abs()是一个函数模板,它返回参数的绝对值。在调用时自动联编相应的abs()函数。所以输出为:3,2.6----------------------------------------------題2.分析以下程序的执行结果#includeiostream.htemplateclassTclassSample{Tn;public:Sample(){}Sample(Ti){n=i;}SampleT&operator+(constaSampleT&);voiddisp(){coutn=nendl;}};templateclassTSampleT&SampleT::operator+(constSampleT&s){staticSampleTtemp;temp.n=n+s.n;returntemp;}voidmain(){Sampleints1(10),s2(20),s3;s3=s1+s2;s3.disp();}解:Sample为一个类模板,产生一个模板类Sampleint,并建立它的三个对象,调用重载运算符+实现s1与s2的加法运算,将结果赋给s3。所以输出为:n=30----------------------------------------------------题3.编写一个函数模板,它返回两个值中的较小者,同时要求能正确处理字符串。解:这里设计一个函数模板templateclassTTmin(Ta,Tb),可以处理int、float和char等数据类型,为了能正确处理字符串,添加一个重载函数专门处理字符串比较,即char*min(char*a,char*b)。本题程序如下:#includeiostream.h#includestring.htemplateclassTTmin(Ta,Tb){return(ab?a:b);}char*min(char*a,char*b){return(strcmp(a,b)0?a:b);}voidmain(){doublea=3.56,b=8.23;chars1[]=Hello,s2[]=Good;cout输出结果:endl;couta,b中较小者:min(a,b)endl;couts1,s2中较小者:min(s1,s2)endl;}输出结果:3.56,8.23中较小者:3.56Hello,Good中较小者:Good----------------------------------------------------题4.设计一个数组类模板ArrayT,其中包含重载下标运算符函数,并由此产生模板类Arrayint和Arraychar,使用一些测试数据对其进行测试。解:本题程序如下:#includeiostream.h#includeiomanip.htemplateclassTclassArray{T*elems;intsize;public:Array(ints);//构造函数~Array();T&operator[](int);//重载下标运算符voidoperator=(T);//重载等号运算符};templateclassTArrayT::Array(ints){size=s;elems=newT[size];for(inti=0;isize;i++)elems[i]=0;}templateclassTArrayT::~Array(){deleteelems;}templateclassTT&ArrayT::operator[](intindex){returnelems[index];}templateclassTvoidArrayT::operator=(Ttemp){for(inti=0;isize;i++)elems[i]=temp;}voidmain(){inti,n=10;Arrayintarr1(n);//产生整型模板类及其对象arr1Arraychararr2(n);//产生字符型模板类及其对象arr2for(i=0;in;i++){arr1[i]='a'+i;//调用重载运算符arr2[i]='a'+i;}coutASCII码字符endl;for(i=0;in;i++)coutsetw(8)arr1[i]setw(8)arr2[i]endl;}本程序的执行结果如下:ASCII码字符97a98b99c100d101e102f103g104h105i106j三层交换技术交换机与路由器密码恢复交换机的选购路由器设置专题路由故障处理手册数字化校园网解决方案题5.一个Sample类模板的私有数据成员为Tn,在该类模板中设计一个operator==重载运算符函数,用于比较各对象的n数据是否相等。解:本题程序如下:#includeiostream.htemplateclassTclassSample{Tn;public:Sample(Ti){n=i;}intoperator==(Sample&);};templateclassTintSampleT::operator==(Sample&s){if(n==s.n)return1;elsereturn0;}voidmain(){Sampleints1(2),s2(3);couts1与s2的数据成员(s1==s2?相等:不相等)endl;Sampledoubles3(2.5),s4(2.5);couts3与s4的数据成员(s3==s4?相等:不相等)endl;}本程序的运行结果如下:s1与s2的数据成员不相等s3与S4的数据成员相等----------------------------------------------------题6.对第3章的例3.5进行修改,只设计一个Sample类,其数据和方法均包含在该类中,而且使用类模板的方式实现。#includeios
本文标题:C++习题与解析-模板
链接地址:https://www.777doc.com/doc-5076028 .html