作业及其答案汇总.doc_第1页
作业及其答案汇总.doc_第2页
作业及其答案汇总.doc_第3页
作业及其答案汇总.doc_第4页
作业及其答案汇总.doc_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

一、类和对象基本概念1) 写出下面程序的运行结果:#include class Apple private :static int nTotalNumber;public:Apple() nTotalNumber +; Apple( ) nTotalNumber -; static void PrintTotal() cout nTotalNumber endl; ;int Apple:nTotalNumber = 0; Apple Fun( const Apple & a ) a.PrintTotal(); return a ; int main () Apple * p = new Apple4;Fun( p2); Apple p1, p2;delete p;p1.PrintTotal(); /*41*/2) 写出下面程序的运行结果:#include class Samplepublic:int v;Sample() ;Sample(int n):v(n) ;Sample( Sample & x) v = 2 + x.v ; ;Sample PrintAndDouble( Sample o) cout o.v;o.v = 2 * o.v;return o;int main()Sample a(5);Sample b = a;Sample c = PrintAndDouble( b );cout endl;cout c.v endl;Sample d;d = a;cout d.v ;/*9225*/3) 下面的程序输出结果是: 05请填空补足程序。所填内容不允许包含分号。class A public:int val;A(_ ) val = n; ; _A &_ GetObj() return _* this_; ;main() A a;cout a.val endl;a.GetObj() = 5;cout a.val endl;/*int n =0A &* this*/4) 下面程序的输出是:3+4i5+6i请补足Complex类的成员函数。不能增加成员变量。#include #include using namespace std;class Complex private:double r,i;public:void Print() cout r + i i endl;int main()Complex a;a = 3+4i;a.Print();a = 5+6i;a.Print();/*Complex() ;Complex( char * s) r = s0 - 0;i = s2 - 0;*/5) 下面程序的输出是:10请补足Sample类的成员函数。不能增加成员变量。#include class Samplepublic:int v;Sample(int n):v(n) ;int main()Sample a(5);Sample b = a;cout b.v ;/*Sample( Sample & x) v = 2 * x.v ; */6)下面程序的输出是:ThisHello请补足MyString类的成员函数。不能增加成员变量。#include #include class MyStringchar * p;public:MyString( char * s ) p = new charstrlen(s)+1;strcpy(p,s);MyString() delete p; const char * c_str() return p;int main()MyString s1(This), s2 =s1;s2.Copy ( Hello);cout s1.c_str () endl s2.c_str () ;/*void Copy( char * s) delete p;p = new charstrlen(s)+1;strcpy(p,s);MyString( MyString & o ) p = new charstrlen(o.p ) + 1 ;strcpy( p,o.p);*/7)下面程序的输出结果是:5,55,5请填空#include #include class Base public:int k;Base(int n):k(n) ;class Bigpublic:int v;Base b;Big _ Big _ ;int main()Big a1(5);Big a2 = a1;cout a1.v , a1.b.k endl;cout a2.v , a2.b.k endl;/*Big(int n):v(n),b(n) Big(Big & x):v(x.v),b(x.b.k) */二、运算符重载1)下面的MyInt类只有一个成员变量。MyInt类内部的部分代码被隐藏了。假设下面的程序能编译通过,且输出结果是:4,1请写出被隐藏的部分。(您写的内容必须是能全部放进 MyInt类内部的,MyInt的成员函数里不允许使用静态变量)。#include class MyIntint nVal;public:MyInt( int n) nVal = n ;int ReturnVal() return nVal;.;main () MyInt objInt(10);objInt-2-1-3;cout objInt.ReturnVal();cout ,;objInt-2-1;cout objInt.ReturnVal();/*MyInt & operator -( int x) nVal -= x;return * this;*/2) 下面的程序输出结果是:(4,5)(7,8)请填空。填写的内容不能包含分号#include class Point private:int x;int y;public:Point(int x_,int y_ ):x(x_),y(y_) ;_;_ operator ( _, const Point & p)_;return _;main()cout Point(4,5) Point(7,8);/*friend ostream & operator ( ostream & o, const Point & 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,#include using std:cout;using std:endl;int main()Array2 a(3,4);int i,j;for( i = 0;i 3; i + )for( j = 0; j 4; j + )aij = i * 4 + j;for( i = 0;i 3; i + ) for( j = 0; j 4; j + ) cout a(i,j) ,;cout endl;cout next endl;Array2 b;b = a;for( i = 0;i 3; i + ) for( j = 0; j 4; j + ) cout bij ,;cout endl;return 0;/*class Array2 private:int * p;int r,c;public:Array2() p = NULL ; Array2( int r_, int c_ ) :r(r_),c(c_)p = new int r * c;Array2( Array2 & a ):r(a.r),c(a.c) p = new int r * c;memcpy( p, a.p,sizeof(int ) * r * c);Array2 & operator=( const Array2 & a ) if( p ) delete p;r = a.r;c = a.c;p = new int r * c;memcpy( p, a.p,sizeof(int ) * r * c);return * this;Array2() if( p) delete p;int * operator ( int i ) return p + i * c;int & operator() ( int i,int j ) return p i * c + j;*/4) 编写HugeInt类,使得下面程序的输出结果是:1)1000000890000002)1000000890000003)100004)100005)100016)100067)100000089010006#include #include #include #include using std:ostream;using std:cout;using std:cin;using std:endl;const int MAX = 110;void main()CHugeInt a(1234545436342424354354365289899834234235);CHugeInt d(9999);CHugeInt temp = CHugeInt(100000088888888) + 111112;CHugeInt temp2 = 111112 + CHugeInt(100000088888888);cout 1) temp endl;cout 2) temp2 endl;cout 3) +d endl;cout 4) d+ endl;cout 5) d endl;d += 5;cout 6) d endl;cout 7) = 0; i - )Numberj+ = si - 0;CHugeInt( int n ) char s20;sprintf(s,%d,n);int i,j;memset(Number,0,sizeof(Number);for( i = strlen(s) -1, j = 0; i = 0; i - )Numberj+ = si - 0;CHugeInt operator +( const CHugeInt & n) const CHugeInt tmp( * this);for( int i = 0;i = 10 ) /看是否要进位tmp.Numberi -= 10;tmp.Numberi+1 +;/进位return tmp;const CHugeInt & operator+() * this = ( * this ) + 1;return * this;const CHugeInt operator+(int n) CHugeInt tmp = * this;* this = ( * this ) + 1;return tmp;const CHugeInt operator +=( const CHugeInt & n)* this = ( * this ) + n;return * this;friend ostream & operator (ostream & o, const CHugeInt & n);friend CHugeInt operator+ ( int n1 , const CHugeInt & n2);CHugeInt operator + ( int n1 ,const CHugeInt & n2)return n2 + n1;ostream & operator = 0 ; i - ) if( n.Numberi ) bStart = true;if( bStart )cout n.Numberi;if( !bStart )cout 0;return o;*/三、继承和多态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- uvw xyzaboutbigmetakeabcdqrst-abcd-程序:#include #include #include #include using namespace std;int CompareString( const void * e1, const void * e2) MyString * s1 = (MyString * ) e1; MyString * s2 = (MyString * ) e2; if( * s1 *s2 ) return 1;main() MyString s1(abcd-),s2,s3(efgh-),s4(s1); MyString SArray4 = big,me,about,take; cout 1. s1 s2 s3 s4 endl; s4 = s3; s3 = s1 + s3; cout 2. s1 endl; cout 3. s2 endl; cout 4. s3 endl; cout 5. s4 endl; cout 6. s12 endl; s2 = s1; s1 = ijkl-; s12 = A ; cout 7. s2 endl; cout 8. s1 endl; s1 += mnop; cout 9. s1 endl; s4 = qrst- + s2; cout 10. s4 endl; s1 = s2 + s4 + uvw + xyz; cout 11. s1 endl; qsort(SArray,4,sizeof(MyString),CompareString); for( int i = 0;i 4;i + ) cout SArrayi endl;/输出s1的下标为0的字符开始长度为4的子串 cout s1(0,4) endl; /输出s1的下标为5的字符开始长度为10的子串 cout s1(5,10) substr(s,l);*/1)看程序写结果:class B private:int nBVal;public: void Print() cout nBVal= nBVal endl; void Fun() cout B:Fun endl; B ( int n ) nBVal = n;class D:public B private :int nDVal;public:void Print() B:Print();cout nDVal=nDValendl;D( int n) : B(3*n) nDVal = n;void Fun() cout D:Fun Fun(); pd-Fun();pb-Print (); pd-Print ();pb = & d; pb-Fun();pb-Print();/*D:FunB:FunD:FunnBVal=2nBVal=24nDVal=8B:FunnBVal=12*/2)看程序写结果:class A public:A( ) virtual void func() cout A:func endl; A( ) virtual void fund( ) cout A:fund endl; ;class B:public A public:B ( ) func( ) ; void fun( ) func( ) ; B ( ) fund( ); ;class C : public B public :C( ) void func( ) cout C:func endl; C() fund( );void fund() cout C:fund endl;main() C c; /*A:funcC:fundA:fund*/3)下面程序的输出结果是:A:FunC:Do请补足横线上丢失的部分#include class A private:int nVal;public:void Fun() cout A:Fun endl; ;void Do() cout A:Do endl; ;class B:public A public:virtual void Do() cout B:Do endl;class C:public B public:void Do( ) cout ”C:Do”endl; void Fun() cout C:Fun endl; ;void Call( _ ) p.Fun(); p.Do();main() C c;Call( c);/B & p;4)下面程序的输出结果是:destructor Bdestructor A请完整写出 class A。 限制条件:不得为 class A 编写构造函数#include class A ;class B:public A public:B() cout destructor B endl; ;main() A * pa;pa = new B;delete pa;/*class A public:virtualA() cout destructor A endl; ;*/5)下面的程序输出结果是:A:FunA:DoA:FunC:Do请填空#include class A private:int nVal;public:void Fun() cout A:Fun endl; ;virtual void Do() cout A:Do endl; ;class B:public A public:virtual void Do() cout B:Do endl;class C:public B public:void Do( ) cout C:Doendl; void Fun() cout C:Fun Fun(); p-Do();main() Call( new A();Call( new C();/* 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)不得添加任何全局变量,不得添加其他函数#include template class Node public:D data;Node * next;templateclass CLinkList private:Node * pHead;public:CLinkList();void AppendNode( D data);void PrintList();templateCLinkList:CLinkList() pHead = new Node;pHead-next = NULL;main()CLinkList l;for( int i = 0;i 4;i +)l.AppendNode(i);l.PrintList();cout endl;for( i = 9;i 12;i +)l.AppendNode(i);l.PrintList();/*templatevoid CLinkList:AppendNode( D data)Node * p = pHead;while( p-next )p = p-next;p-next = new Node;p = p-next;p-data = data;p-next = NULL;templatevoid CLinkList:PrintList()Node * p = pHead;while( p-next ) cout next-data next;*/2)填空使程序能编译通过,并写出运行的输出结果#include template /(a)class myclass T i;public:myclass (T a) i = a; void show( ) cout i endl;void main() myclass obj(This); /(b)obj.show();该程序输出结果为:_ /(c)/*class Tchar *This*/3)下面的程序输出是:TomHanks请填空。注意,不允许使用任何常量。#include #include using namespace std;template class myclass _;int nSize;public:myclass ( _, int n) p = new Tn;for( int i = 0;i n;i + )pi = ai;nSize = n; myclass( ) delete p;void Show()for( int i = 0;i nSize;i + ) cout pi;void main() char * szName = TomHanks;myclass obj(_);obj.Show();/* T * pT * aszName,strlen(szName)*/五、STL1) 看程序写结果#include #include using namespace std;class A private :int nId;public:A(int n) nId = n; cout nId contructor endl; ;A( const A & a ) nId = a.nId ;cout nId copy constructor endl;A( ) cout nId destructor endl;main()vector vp;vp.push_back(new A(1);vp.push_back(new A(2);vector v;v.push_back (3);/*1 contructor2 contructor3 contructor3 copy constructor3 destructor3 destructor*/2) 下面的程序输出结果为:Tom,Jack,Mary,John,请填空程序:template class MyClass T arrayT2;public:MyClass( T * begin ) copy( begin, begin + T2, array);void List() T * i;for( i = array; i != array + T2;i +)cout * i , ;main()string array4 = Tom,Jack,Mary,John;_ ;obj.List(); /*class T,int T2MyClass obj(array)*/3)下面的程序输出结果是:1 2 6 7 8 9请填空main()int a = 8,7,8,9,6,2,1;_;for( int i = 0;i 7;i + )_;ostream_iterator o(cout, );copy( v.begin(),v.end(),o);/*setv v.insert(ai)*/3) 下面程序输出结果是:Tom,Jack,Mary,John,请填空程序:#include #include #include using namespace std;template class MyClass vector array;public:MyClass ( T * begin,int n ):array(n) copy( begin, begin + n, array.begin();void List() _;for( i = array.begin(); i != array.end();i +)cout * i , ;main()string array4 = Tom,Jack,Mary,John;_;obj.List(); /*vector:iterator i;MyClass obj( array,4);*/.5) 下面程序输出结果是:A:Print: 1B:Print: 2B:Print: 3请填空程序:template void PrintAll( const T & c )T:const_iterator i;for( i = c.begin(); i != c.end(); i + ) _;class A protected:int nVal;public:A(int i):nVal(i) virtual void Print() cout A:Print: nVal endl; ;class B:public A public:B(int i):A(i) void Print() cout B:Print: nVal Print()vector v*/6) 写一个自己的 CMyostream_iterator 模板,使之能和 ostream_iterator 模板达到一样的效果 #include #include #include using namespace std;main() int a5 = 1,2,3,4,5; CMyostream_iterator output(cout,*); vector v(a,a+5); copy(v.begin(),v.end(),output);/*template class CMyostream_iteratorprivate:ostream & o;const char * s;public:CMyostream_iterator( ostream & output, const char * sz):o(output),s(sz)void operator+() ;void operator=(const T & val )o val s;CMyostream_iterator & operator * ( ) return * this;*/1) 下面程序的输出结果是:5*3*4*2*1*1*2*3*4*5*1*2*9*

温馨提示

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

最新文档

评论

0/150

提交评论