作业及其答案汇总.docx

上传人:b****6 文档编号:7105200 上传时间:2023-01-17 格式:DOCX 页数:40 大小:24.68KB
下载 相关 举报
作业及其答案汇总.docx_第1页
第1页 / 共40页
作业及其答案汇总.docx_第2页
第2页 / 共40页
作业及其答案汇总.docx_第3页
第3页 / 共40页
作业及其答案汇总.docx_第4页
第4页 / 共40页
作业及其答案汇总.docx_第5页
第5页 / 共40页
点击查看更多>>
下载资源
资源描述

作业及其答案汇总.docx

《作业及其答案汇总.docx》由会员分享,可在线阅读,更多相关《作业及其答案汇总.docx(40页珍藏版)》请在冰豆网上搜索。

作业及其答案汇总.docx

作业及其答案汇总作业及其答案汇总一、类和对象基本概念一、类和对象基本概念1)写出下面程序的运行结果:

#includeclassAppleprivate:

staticintnTotalNumber;public:

Apple()nTotalNumber+;Apple()nTotalNumber-;staticvoidPrintTotal()coutnTotalNumberendl;intApple:

nTotalNumber=0;AppleFun(constApple&a)a.PrintTotal();returna;intmain()Apple*p=newApple4;Fun(p2);Applep1,p2;deletep;p1.PrintTotal();/*41*/2)写出下面程序的运行结果:

#includeclassSamplepublic:

intv;Sample();Sample(intn):

v(n);Sample(Sample&x)v=2+x.v;SamplePrintAndDouble(Sampleo)couto.v;o.v=2*o.v;returno;intmain()Samplea(5);Sampleb=a;Samplec=PrintAndDouble(b);coutendl;coutc.vendl;Sampled;d=a;coutd.v;/*9225*/3)下面的程序输出结果是:

05请填空补足程序。

所填内容不允许包含分号。

classApublic:

intval;A(_)val=n;_A&_GetObj()return_*this_;main()Aa;couta.valendl;a.GetObj()=5;couta.valendl;/*intn=0A&*this*/4)下面程序的输出是:

3+4i5+6i请补足Complex类的成员函数。

不能增加成员变量。

#include#includeusingnamespacestd;classComplexprivate:

doubler,i;public:

voidPrint()coutr+iiendl;intmain()Complexa;a=3+4i;a.Print();a=5+6i;a.Print();/*Complex();Complex(char*s)r=s0-0;i=s2-0;*/5)下面程序的输出是:

10请补足Sample类的成员函数。

不能增加成员变量。

#includeclassSamplepublic:

intv;Sample(intn):

v(n);intmain()Samplea(5);Sampleb=a;coutb.v;/*Sample(Sample&x)v=2*x.v;*/6)下面程序的输出是:

ThisHello请补足MyString类的成员函数。

不能增加成员变量。

#include#includeclassMyStringchar*p;public:

MyString(char*s)p=newcharstrlen(s)+1;strcpy(p,s);MyString()deletep;constchar*c_str()returnp;intmain()MyStrings1(This),s2=s1;s2.Copy(Hello);couts1.c_str()endls2.c_str();/*voidCopy(char*s)deletep;p=newcharstrlen(s)+1;strcpy(p,s);MyString(MyString&o)p=newcharstrlen(o.p)+1;strcpy(p,o.p);*/7)下面程序的输出结果是:

5,55,5请填空#include#includeclassBasepublic:

intk;Base(intn):

k(n);classBigpublic:

intv;Baseb;Big_Big_;intmain()Biga1(5);Biga2=a1;couta1.v,a1.b.kendl;couta2.v,a2.b.kendl;/*Big(intn):

v(n),b(n)Big(Big&x):

v(x.v),b(x.b.k)*/二、运算符重载二、运算符重载1)下面的MyInt类只有一个成员变量。

MyInt类内部的部分代码被隐藏了。

假设下面的程序能编译通过,且输出结果是:

4,1请写出被隐藏的部分。

(您写的内容必须是能全部放进MyInt类内部的,MyInt的成员函数里不允许使用静态变量)。

#includeclassMyIntintnVal;public:

MyInt(intn)nVal=n;intReturnVal()returnnVal;.;main()MyIntobjInt(10);objInt-2-1-3;coutobjInt.ReturnVal();cout,;objInt-2-1;coutobjInt.ReturnVal();/*MyInt&operator-(intx)nVal-=x;return*this;*/2)下面的程序输出结果是:

(4,5)(7,8)请填空。

填写的内容不能包含分号#includeclassPointprivate:

intx;inty;public:

Point(intx_,inty_):

x(x_),y(y_);_;_operator(_,constPoint&p)_;return_;main()coutPoint(4,5)Point(7,8);/*friendostream&operator(ostream&o,constPoint&p);ostream&ostream&oo(p.x,p.y)endlo*/3)写一个二维数组类Array2,使得下面程序的输出结果是:

0,1,2,3,4,5,6,7,8,9,10,11,next0,1,2,3,4,5,6,7,8,9,10,11,#includeusingstd:

cout;usingstd:

endl;intmain()Array2a(3,4);inti,j;for(i=0;i3;i+)for(j=0;j4;j+)aij=i*4+j;for(i=0;i3;i+)for(j=0;j4;j+)couta(i,j),;coutendl;coutnextendl;Array2b;b=a;for(i=0;i3;i+)for(j=0;j4;j+)coutbij,;coutendl;return0;/*classArray2private:

int*p;intr,c;public:

Array2()p=NULL;Array2(intr_,intc_):

r(r_),c(c_)p=newintr*c;Array2(Array2&a):

r(a.r),c(a.c)p=newintr*c;memcpy(p,a.p,sizeof(int)*r*c);Array2&operator=(constArray2&a)if(p)deletep;r=a.r;c=a.c;p=newintr*c;memcpy(p,a.p,sizeof(int)*r*c);return*this;Array2()if(p)deletep;int*operator(inti)returnp+i*c;int&operator()(inti,intj)returnpi*c+j;*/4)编写HugeInt类,使得下面程序的输出结果是:

3)100004)100005)100016)10006#include#include#include#includeusingstd:

ostream;usingstd:

cout;usingstd:

cin;usingstd:

endl;constintMAX=110;voidmain()CHugeIntd(9999);cout1)tempendl;cout2)temp2endl;cout3)+dendl;cout4)d+endl;cout5)dendl;d+=5;cout6)dendl;cout7)=0;i-)Numberj+=si-0;CHugeInt(intn)chars20;sprintf(s,%d,n);inti,j;memset(Number,0,sizeof(Number);for(i=strlen(s)-1,j=0;i=0;i-)Numberj+=si-0;CHugeIntoperator+(constCHugeInt&n)constCHugeInttmp(*this);for(inti=0;i=10)/看是否要进位tmp.Numberi-=10;tmp.Numberi+1+;/进位returntmp;constCHugeInt&operator+()*this=(*this)+1;return*this;constCHugeIntoperator+(intn)CHugeInttmp=*this;*this=(*this)+1;returntmp;constCHugeIntoperator+=(constCHugeInt&n)*this=(*this)+n;return*this;friendostream&operator(ostream&o,constCHugeInt&n);friendCHugeIntoperator+(intn1,constCHugeInt&n2);CHugeIntoperator+(intn1,constCHugeInt&n2)returnn2+n1;ostream&operator=0;i-)if(n.Numberi)bStart=true;if(bStart)coutn.Numberi;if(!

bStart)cout0;returno;*/三、继承和多态三、继承和多态1)写一个MyString类,使得下面程序的输出结果是:

1.abcd-efgh-abcd-2.abcd-3.4.abcd-efgh-5.efgh-6.c7.abcd-8.ijAl-9.ijAl-mnop10.qrst-abcd-11.abcd-qrst-abcd-uvwxyzaboutbigmetakeabcdqrst-abcd-程序:

#include#include#include#includeusingnamespacestd;intCompareString(constvoid*e1,constvoid*e2)?

MyString*s1=(MyString*)e1;?

MyString*s2=(MyString*)e2;?

if(*s1*s2)?

return1;main()?

MyStrings1(abcd-),s2,s3(efgh-),s4(s1);?

MyStringSArray4=big,me,about,take;?

cout1.s1s2s3s4endl;?

s4=s3;?

s3=s1+s3;?

cout2.s1endl;?

cout3.s2endl;?

cout4.s3endl;?

cout5.s4endl;?

cout6.s12endl;?

s2=s1;?

s1=ijkl-;?

s12=A;?

cout7.s2endl;?

cout8.s1endl;?

s1+=mnop;?

cout9.s1endl;?

s4=qrst-+s2;?

cout10.s4endl;?

s1=s2+s4+uvw+xyz;?

cout11.s1endl;?

qsort(SArray,4,sizeof(MyString),CompareString);?

for(inti=0;i4;i+)?

coutSArrayiendl;/输出s1的下标为0的字符开始长度为4的子串?

couts1(0,4)endl;/输出s1的下标为5的字符开始长度为10的子串?

couts1(5,10)substr(s,l);*/1)看程序写结果:

classBprivate:

intnBVal;public:

voidPrint()coutnBVal=nBValendl;voidFun()coutB:

Funendl;B(intn)nBVal=n;classD:

publicBprivate:

intnDVal;public:

voidPrint()B:

Print();coutnDVal=nDValendl;D(intn):

B(3*n)nDVal=n;voidFun()coutD:

FunFun();pd-Fun();pb-Print();pd-Print();pb=&d;pb-Fun();pb-Print();/*D:

FunB:

FunD:

FunnBVal=2nBVal=24nDVal=8B:

FunnBVal=12*/2)看程序写结果:

classApublic:

A()virtualvoidfunc()coutA:

funcendl;A()virtualvoidfund()coutA:

fundendl;classB:

publicApublic:

B()func();voidfun()func();B()fund();classC:

publicBpublic:

C()voidfunc()coutC:

funcendl;C()fund();voidfund()coutC:

fundendl;main()Cc;/*A:

funcC:

fundA:

fund*/3)下面程序的输出结果是:

A:

FunC:

Do请补足横线上丢失的部分#includeclassAprivate:

intnVal;public:

voidFun()coutA:

Funendl;voidDo()coutA:

Doendl;classB:

publicApublic:

virtualvoidDo()coutB:

Doendl;classC:

publicBpublic:

voidDo()cout”C:

Do”endl;voidFun()coutC:

Funendl;voidCall(_)p.Fun();p.Do();main()Cc;Call(c);/B&p;4)下面程序的输出结果是:

destructorBdestructorA请完整写出classA。

限制条件:

不得为classA编写构造函数#includeclassA;classB:

publicApublic:

B()coutdestructorBendl;main()A*pa;pa=newB;deletepa;/*classApublic:

virtualA()coutdestructorAendl;*/5)下面的程序输出结果是:

A:

FunA:

DoA:

FunC:

Do请填空#includeclassAprivate:

intnVal;public:

voidFun()coutA:

Funendl;virtualvoidDo()coutA:

Doendl;classB:

publicApublic:

virtualvoidDo()coutB:

Doendl;classC:

publicBpublic:

voidDo()coutC:

Doendl;voidFun()coutC:

FunFun();p-Do();main()Call(newA();Call(newC();/*A*p*/四、模板四、模板1)CLinkList是一个带表头节点的单链表的类模板。

带表头节点的单链表的特点是:

当链表为空时,表中仍有一个节点,即表头节点。

请完整写出CLinkList类模板中列出的AppendNode和PrintList成员函数,使得下面程序的输出结果是:

0,1,2,3,0,1,2,3,9,10,11,注意:

1)不得调用任何库函数,库模板,不得使用static关键字,不得使用除NULL以外的任何常量2)不得为Node和CLinkList模板添加任何成员3)不得添加任何全局变量,不得添加其他函数#includetemplateclassNodepublic:

Ddata;Node*next;templateclassCLinkListprivate:

Node*pHead;public:

CLinkList();voidAppendNode(Ddata);voidPrintList();templateCLinkList:

CLinkList()pHead=newNode;pHead-next=NULL;main()CLinkListl;for(inti=0;i4;i+)l.AppendNode(i);l.PrintList();coutendl;for(i=9;i12;i+)l.AppendNode(i);l.PrintList();/*templatevoidCLinkList:

AppendNode(Ddata)Node*p=pHead;while(p-next)p=p-next;p-next=newNode;p=p-next;p-data=data;p-next=NULL;templatevoidCLinkList:

PrintList()Node*p=pHead;while(p-next)coutnext-datanext;*/2)填空使程序能编译通过,并写出运行的输出结果#includetemplate/(a)classmyclassTi;public:

myclass(Ta)i=a;voidshow()coutiendl;voidmain()myclassobj(This);/(b)obj.show();该程序输出结果为:

_/(c)/*classTchar*This*/3)下面的程序输出是:

TomHanks请填空。

注意,不允许使用任何常量。

#include#includeusingnamespacestd;templateclassmyclass_;intnSize;public:

myclass(_,intn)p=newTn;for(inti=0;in;i+)pi=ai;nSize=n;myclass()deletep;voidShow()for(inti=0;inSize;i+)coutpi;voidmain()char*szName=TomHanks;myclassobj(_);obj.Show();/*T*pT*aszName,strlen(szName)*/五、五、STL1)看程序写结果#include#includeusingnamespacestd;classAprivate:

intnId;public:

A(intn)nId=n;coutnIdcontructorendl;A(constA&a)nId=a.nId;coutnIdcopyconstructorendl;A()coutnIddestructorendl;main()vectorvp;vp.push_back(newA

(1);vp.push_back(newA

(2);vectorv;v.push_back(3);/*1contructor2contructor3contructor3copyconstructor3destructor3destructor*/2)下面的程序输出结果为:

Tom,Jack,Mary,John,请填空程序:

templateclassMyClassTarrayT2;public:

MyClass(T*begin)copy(begin,begin+T2,array);voidList()T*i;for(i=array;i!

=array+T2;i+)cout*i,;main()stringarray4=Tom,Jack,Mary,John;_;obj.List();/*classT,intT2MyClassobj(array)*/3)下面的程序输出结果是:

126789请填空main()inta=8,7,8,9,6,2,1;_;for(inti=0;i7;i+)_;ostream_iteratoro(cout,);copy(v.begin(),v.end(),o);/*setvv.insert(ai)*/3)下面程序输出结果是:

Tom,Jack,Mary,John,请填空程序:

#include#include#includeusingnamespacestd;templateclassMyClassvectorarray;public:

MyClass(T*begin,intn):

array(n)copy(begin,begin+n,array.begin();voidList()_;for(i=array.begin();i!

=array.end();i+)cout*i,;main()stringarray4=Tom,Jack,Mary,John;_;obj.List();/*vector:

iteratori;MyClassobj(array,4);*/.5)下面程序输出结果是:

A:

Print:

1B:

Print:

2B:

Print:

3请填空程序:

templatevoidPrintAll(constT&c)T:

const_iteratori;for(i=c.begin();i!

=c.end();i+)_;classAprotected:

intnVal;public:

A(inti):

nVal(i)virtualvoidPrint()coutA:

Print:

nValendl;classB:

publicApublic:

B(inti):

A(i)voidPrint()coutB:

Print:

nValPrint()vectorv*/6)写一个自己的CMyostream_iterator模板,使之能和ostream_iterator模板达到一样的效果#include#include#includeusingnamespacestd;main()inta5=1,2,3,4,5;CMyostream_iteratoroutput(cout,*);vectorv(a,a+5);copy(v.begin(),v.end(),output);/*templateclassCMyostream_iteratorprivate:

ostream&o;constchar*s;public:

CMyostream_iterator(ostream&output,constchar*sz):

o(output),s(sz)voidoperator+();voidoperator=(constT&val)ovals;CMyostream_iterator&operator*()return*this;*/1)下面程序的输出结果是:

5*3*4*2*1*1*2*3*4*5*1*2*9*4*5*请填空usingnamesp

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1