1、C.一个类定义中,只要有一个函数模板,则这个类是类模板D.类模板的成员函数都是函数模板,类模板实例化后,成员函数也随之实例化3.2下列的模板说明中,正确的是(D)。A.templateB.templateC.templateD.template3.3函数模板定义如下:templateMax(Ta,Tb,T&c)c=a+b;下列选项正确的是(B)。A.intx,y;charz; B.doublex,y,z;Max(x,y,z); Max(x,y,z);C.intx,y;floatz; D.floatx;doubley,z;3.4下列有关模板的描述错误的是(D)。A模板把数据类型作为一个设计参数,
2、称为参数化程序设计。B使用时,模板参数与函数参数相同,是按位置而不是名称对应的。C模板参数表中可以有类型参数和非类型参数。D类模板与模板类是同一个概念。3.5类模板的使用实际上是将类模板实例化成一个(C)。A函数B对象C类D抽象类3.6类模板的模板参数(D)。A只能作为数据成员的类型B只可作为成员函数的返回类型C只可作为成员函数的参数类型D以上三种均可3.7类模板的实例化(A)。A在编译时进行B属于动态联编C在运行时进行D在连接时进行3.8以下类模板定义正确的为(A)。Atemplate BtemplateCtemplate Dtemplate4编程题4.1设计一个函数模板,其中包括数据成员T
3、an以及对其进行排序的成员函数sort(),模板参数T可实例化成字符串。#includestringusingnamespacestd;voidSort(T*a,intn) inti,j; Tt; for(i=0;in-1;i+) for(j=0;jaj+1)t=aj;aj=aj+1;aj+1=t;voidPrint(T*a,intn) inti;n; coutai; coutendl;intmain() stringStr10=Zhang,LiWangQianZhaoWuXuTangShenLiang; intInt8=20,12,0,-5,9,-18,6,11; doubleDou7=3.
4、07,8.12,-0.45,6,10,-9,7.29; Sort(Int,8);double(Dou,7); Print(Str,10); Print(Int,8); Print(Dou,7); return0;4.2设计一个类模板,其中包括数据成员Tan以及在其中进行查找数据元素的函数intsearch(T)模板参数T可实例化成字符串。typenameT,intnclassAintsize;T*element;public:A();A();intSearch(T);voidSetElement(intindex,constT&value);A:A() size=n1?n:1;element=
5、newTsize;A()deleteelement;intASearch(Tt)size; if(elementi=t) returni; return-1;voidASetElement(intindex,constT&value)elementindex=value; AintAry; /用int实例化,建立模板类对象double,10douAry;/用double实例化,建立模板类对象5; intAry.SetElement(i,i+3);10; douAry.SetElement(i,(i+i)*0.35); i=intAry.Search(7); if(i=0)cout i=douA
6、ry.Search(0.7);4.3设计一个单向链表类模板,节点数据域中数据从小到大排列,并设计插入、删除节点的成员函数。classList;classNode Tinfo;/数据域 Node*link;/指针域 Node();/生成头结点的构造函数 Node(constT&data);/生成一般结点的构造函数 friendclassListNodeNode()link=NULL;Node(constT&data) info=data; link=NULL;/定义链表类classList*head;/链表头指针和尾指针 List();/构造函数,生成头结点(空链表) List();/析构函数
7、voidMakeEmpty();/清空一个链表,只余表头结点*Find(Tdata);/搜索数据域与data相同的结点,返回该结点的地址 voidPrintList();/打印链表的数据域 voidInsertOrder(Node*p);/按升序生成链表*CreatNode(Tdata);/创建一个结点(孤立结点)*DeleteNode(Node/删除指定结点ListList() head=newNode(-9999);/头结点,最小的数据从小到大插入List() MakeEmpty(); deletehead;voidListlink!=NULL) tempP=head-link; head
8、-link=tempP-/把头结点后的第一个节点从链中脱离 deletetempP;/删除(释放)脱离下来的结点 *List while(tempP!=NULL&tempP-info!=data)tempP=tempP- returntempP;/搜索成功返回该结点地址,不成功返回NULLPrintList()infoInsertOrder(Nodeinfo)break;/找第一个比插入结点大的结点,由tempP指向 tempQ=tempP; p-link=tempP; tempQ-link=p;CreatNode(Tdata)/建立新节点*tempP=newNode(data);Delete
9、Node(Nodelink,*tempQ=head,*tempC;tempP!=p) tempC=tempP; returntempC;*P1; Listj; P1=list1.Find(j); if(P1! P1=list1.DeleteNode(P1); deleteP1; list1.PrintList(); elsecoutlink,*tempC; tempC=CreatNode(tempP-info); InsertAfter(tempC);operator=(List&/先释放原来链表的数据结点 return*this;list1,list2; list2=list1; list2.PrintList();list3=list1; list3.PrintList(); list2=list3=list1; list2.MakeEmpty(); list3.MakeEmpty();
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1