第十章类模板课后编程题目答案.doc_第1页
第十章类模板课后编程题目答案.doc_第2页
第十章类模板课后编程题目答案.doc_第3页
第十章类模板课后编程题目答案.doc_第4页
第十章类模板课后编程题目答案.doc_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1。设计一个类模板,其中包含数据成员Tan以及对其进行排序的成员函数Sort(),模板参数T可实例化成字符串。解;如果T仅仅可以实例化成基本数据类型与char*类型的字符串,可通过重载sort()实现,程序如下:#include #include template class Arrayprivate:T an;public:void sort(double) for (int i=0;in-1;i+)for (int j=i+1;jaj)T t;t=ai;ai=aj;aj=t;void sort(char *)for (int i=0;in-1;i+)for (int j=i+1;j0)T t;t=ai;ai=aj;aj=t;void disp()for (int i=0;in-1;i+)if (ai!=NULL)coutai,t;elsecout,t;if (ai!=NULL)coutaiendl;elsecoutendl;Array(T a)for (int i=0;iai=ai;void main()float f=1.2,2.3,7.7,4,3,4,2.3;Array a1(f);a1.sort(f0);a1.disp();char * a6=a,abc,ABC,abcd; Array a2(a);a2.sort(a0);a2.disp();char c=a,b,C,2;Array a3(c);a3.sort(c0);a3.disp();如果T的类型可以实例化成自定义的字符串类String类型,需要重载赋值运算符=,插入运算符,分别用于进行字符串赋值,输出,比较。程序如下:#include #include using namespace std;class Stringprivate:char *Str;int len;public:String(int n=0)Str=NULL;len=n;String(const char *p)len=strlen(p);Str=NULL;if (len!=0)Str=new charlen+1;strcpy(Str,p);String(String & r)len=r.len;if(len0)Str=new charlen+1;strcpy(Str,r.Str);String()if (len0)delete Str;String &operator=(const String & r)if (len0)delete Str;Str=NULL;len=r.len;if(len0)Str=new charlen+1;strcpy(Str,r.Str);return *this;bool operator (const String &r)if (Str=NULL)return false;if (Str!=NULL & r.Str=NULL)return true;int n=(lenr.len?len:r.len);for (int i=0;in;i+)if (Strir.Stri)return true;return false;friend ostream &operator(ostream &output,const String &s)if (s.Str!=NULL)outputs.Str;return output;template class Arrayprivate:T an;public:void sort() for (int i=0;in-1;i+)for (int j=i+1;jaj)T t;t=ai;ai=aj;aj=t;void disp()for (int i=0;in-1;i+)coutai,t;coutaiendl;Array(T a)for (int i=0;iai=ai;void main()float f=1.2,2.3,7.7,4,3,4,2.3;Array a1(f);a1.sort();a1.disp();String a6=a,abc,ABC,abcd; Array a2(a);a2.sort();a2.disp();2.设计一个类模板,其中包括数据成员T an以及在其中进行查找数据元素的函数int search(T)模板参数T可实例化成字符串。#include #include using namespace std;class Stringprivate:char *Str;int len;public:String(int n=0)Str=NULL;len=n;String(const char *p)len=strlen(p);Str=NULL;if (len!=0)Str=new charlen+1;strcpy(Str,p);String(String & r)len=r.len;if(len0)Str=new charlen+1;strcpy(Str,r.Str);String()if (len0)delete Str;String &operator=(const String & r)if (len0)delete Str;Str=NULL;len=r.len;if(len0)Str=new charlen+1;strcpy(Str,r.Str);return *this;bool operator =(const String &r)if (len!=r.len) return false;if (len=0) return true;for (int i=0;ilen;i+) if (Stri!=r.Stri)return false;return true;friend ostream &operator(ostream &output,const String &s)if (s.Str!=NULL)outputs.Str;return output;template class Arrayprivate:T an;public:int search(T key) for (int i=0;in;i+)if (ai=key)return i;return -1;void disp()for (int i=0;in-1;i+)coutai,t;coutaiendl;Array(T a)for (int i=0;iai=ai;void main()float f=1.2,2.3,7.7,4,3,4,2.3;Array a1(f);couta1.search (2.3)endl;String a6=a,abc,ABC,abcd; Array a2(a);couta2.search();3.完善本章的Student类模板,使之可以添加,删除,查询学生记录,对学生成绩进行排序。#include #include using namespace std;class Stringprivate:char *Str;int len;public:String(int n=0)Str=NULL;len=n;String(const char *p)len=strlen(p);Str=NULL;if (len!=0)Str=new charlen+1;strcpy(Str,p);String(String & r)len=r.len;if(len0)Str=new charlen+1;strcpy(Str,r.Str);String()if (len0)delete Str;String &operator=(const String & r)if (len0)delete Str;Str=NULL;len=r.len;if(len0)Str=new charlen+1;strcpy(Str,r.Str);return *this;bool operator =(const String &r)if (len!=r.len) return false;if (len=0) return true;for (int i=0;ilen;i+) if (Stri!=r.Stri)return false;return true;friend ostream &operator(ostream &output,const String &s)if (s.Str!=NULL)outputs.Str;return output;template class Studentprivate:int n;TNO StudentIDnum;TScore scorenum;public:void append(TNO ID,TScore s);void Delete(TNO ID);int search(TNO);void sort();void DispAll();Student() n=0;template void Student:append(TNO ID,TScore s)if(nnum)StudentIDn=ID;scoren=s;n+;template void Student:Delete(TNO ID) for(int i=0;in;i+)if (StudentIDi=ID)for(int j=i;jn;j+)StudentIDj=StudentIDj+1;scorej=scorej+1;n-;template int Student:search(TNO no)for (int i=0;in;i+)if (StudentIDi=no)return i+1;return 0;template void Student:sort()for(int i=0;in-1;i+)for (int j=i+1;jn;j+)if (scoreiscorej)TScore ts;TNO tn;ts=scorei;tn=StudentIDi;scorei=scorej;StudentIDi=StudentIDj;scorej=ts;StudentIDj=tn;template void Student:DispAll()for (int i=0;in;i+)coutStudentIDitscoreiendl;void main()Student computer1; computer1.append(200609125,70.5);computer1.append(200609126,85);computer1.append(200609110,69);computer1.append(200609107,92);coutbefore sortendl;computer1.DispAll();computer1.sort();coutafter sortendl;computer1.DispAll();Student computer2;String S1(200609125); String S2(200609126);computer2.append(S1,70.5);computer2.append(S2,85);computer2.append(200609110,69);computer2.append(200609107,92);coutbefore sortendl;computer2.DispAll();computer2.sort();coutafter sortendl;computer2.DispAll();coutafter deleteS1tS2endl;computer2.Delete(S1);computer2.Delete(S2);computer2.DispAll();coutcomputer2.search(S2);4,设计一个单向链表类模板,节点数据域中数据从小到大排列,并设计插入,删除节点的成员函数。#include using namespace std;template class ListNode private:TYPE data;ListNode * next; static ListNode * CurNode; static ListNode * head; public:ListNode():next(NULL) head=CurNode=this;ListNode(TYPE NewData):data(NewData),next(NULL)void InsertNode(TYPE NewNode);void DeleteNode(TYPE NewNode);void DispList();void DelList();template ListNode * ListNode:CurNode;template ListNode * ListNode:head;template void ListNode:InsertNode(TYPE NewData)ListNode *PreNode,*TempNode;PreNode=head;CurNode=PreNode-next;while(CurNode!=NULL&CurNode-datanext;if (CurNode=NULL)PreNode-next=new ListNode(NewData);elseTempNode=new ListNode(NewData);TempNode-next=CurNode;PreNode-next=TempNode;template void ListNode:DeleteNode(TYPE NewData)ListNode *PreNode;PreNode=head;CurNode=PreNode-next;while(CurNode!=NULL&CurNode-datanext;while(CurNode!=NULL&CurNode-data=NewData)PreNode-next=CurNode-next;delete CurNode;CurNode=PreNode-next;template void ListNode:DispList()CurNode=head-next;while(CurNode!=NULL)coutdatanext;template void ListNode:DelList()ListNode *q; CurNode=head-next;while(CurNode!=NULL) q=CurNode-next; delete CurNode; CurNode=q; head-next=NULL;void main() ListNode CList; CList.InsertNode(B); CList.InsertNode(A); CList.InsertNode(C); CList.InsertNode(A); CList.DispList(); CList.DeleteNode(A); coutafter delet Aendl; CList.DispList();5,利用Stack类模板计算不含括号的四则运算式的值。#includeusing namespace std;template class Stack private: int size; int top; T* space; public: Stack(int=10); Stack() delete space; bool push(c

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论