作业及其答案汇总.docx
《作业及其答案汇总.docx》由会员分享,可在线阅读,更多相关《作业及其答案汇总.docx(40页珍藏版)》请在冰豆网上搜索。
作业及其答案汇总作业及其答案汇总一、类和对象基本概念一、类和对象基本概念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