C++綜合練習-答案_第1頁
C++綜合練習-答案_第2頁
C++綜合練習-答案_第3頁
C++綜合練習-答案_第4頁
C++綜合練習-答案_第5頁
已閱讀5頁,還剩101頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第三章類和對象一、選擇題1.在一個類的定義中,包含有(

C

)成員的定義。

A.數據

B.函數

C.數據和函數

D.數據或函數2.在類作用域中能夠通過直接使用該類的(

D)成員名進行訪問。

A.私有

B.公用

C.保護

D.任何3.假定AA為一個類,a為該類公有的數據成員,x為該類的一個對象,則訪問x對象中數據成員a的格式為(

D)。

A.x(a)

B.x[a]

C.x->a

D.x.a4.假定AA為一個類,a()為該類公有的函數成員,x為該類的一個對象,則訪問x對象中函數成員a()的格式為(

B

)。

A.x.a

B.x.a()

C.x->a

D.x->a()5.假定AA為一個類,a為該類公有的數據成員,px為指向該類對象的一個指針,則訪問px所指對象中數據成員a的格式為(C

)。

A.px(a)

B.px[a]

C.px->a

D.px.a6.假定AA為一個類,a為該類私有的數據成員,GetValue()為該類公有函數成員,它返回a的值,x為該類的一個對象,則訪問x對象中數據成員a的格式為(

D)。

A.x.a

B.x.a()

C.x->GetValue()

D.x.GetValue()7.假定AA為一個類,inta()為該類的一個成員函數,若該成員函數在類定義體外定義,則函數頭為(A

)。

A.intAA::a()

B.intAA:a()

C.AA::a()

D.AA::inta()8.假定AA為一個類,a為該類公有的數據成員,若要在該類的一個成員函數中訪問它,則書寫格式為(A

)。

A.a

B.AA::a

C.a()

D.AA::a()9.若需要把一個類外定義的成員函數指明為內聯函數,則必須把關鍵字(

B)放在函數原型或函數頭的前面。

A.in

B.inline

C.inLine

D.InLiner10.在多文件結構的程序中,通常把類的定義單獨存放于(

D

)中。

A.主文件

B.實現文件

C.庫文件

D.頭文件11.在多文件結構的程序中,通常把類中所有非內聯函數的定義單獨存放于(

B)中。

A.主文件

B.實現文件

C.庫文件

D.頭文件12.在多文件結構的程序中,通常把含有main()函數的文件稱為(A

)。

A.主文件

B.實現文件

C.程序文件

D.頭文件13.在C++程序中使用的cin標識符是系統類庫中定義的(

A)類中的一個對象。

A.istream

B.ostream

C.iostream

D.fstream14.在C++程序中使用的cout標識符是系統類庫中定義的(

B)類中的一個對象。

A.istream

B.ostream

C.iostream

D.fstream15.假定AA是一個類,abc是該類的一個成員函數,則參數表中隱含的第一個參數的類型為(

D)。

A.int

B.char

C.AA

D.AA*16.假定AA是一個類,abc是該類的一個成員函數,則參數表中隱含的第一個參數為(

C)。

A.abc

B.*this

C.this

D.this&17.假定AA是一個類,“AA&abc();”是該類中一個成員函數的原型,若該函數存在對*this賦值的語句,當用x.abc()調用該成員函數后,x的值(A

)。

A.已經被改變

B.可能被改變

C.不變

D.不受函數調用的影響

18.假定AA是一個類,“AA*abc()const;”是該類中一個成員函數的原型,若該函數返回this值,當用x.abc()調用該成員函數后,x的值(

C)。

A.已經被改變

B.可能被改變

C.不變

D.受到函數調用的影響

19.類中定義的成員默認為(

B

)訪問屬性。

A.public

B.private

C.protected

D.friend

20.結構中定義的成員默認為(

A)訪問屬性。

A.public

B.private

C.protected

D.friend

21.當類中一個字符指針成員指向具有n個字節的存儲空間時,它所能存儲字符串的最大長度為(

C)。

A.n

B.n+1

C.n-1

D.n-2

22.對于一個類的構造函數,其函數名與類名(

A)。

A.完全相同

B.基本相同

C.不相同

D.無關系

23.對于一個類的析構函數,其函數名與類名(

C)。

A.完全相同

B.完全不同

C.只相差一個字符

D.無關系

24.類的構造函數是在定義該類的一個(

C)時被自動調用執行的。

A.成員函數

B.數據成員

C.對象

D.友元函數

25.類的析構函數是一個對象被(

B)時自動調用的。

A.建立

B.撤消

C.賦值

D.引用

26.一個類的構造函數通常被定義為該類的(

A)成員。

A.公用

B.保護

C.私有

D.友元

27.一個類的析構函數通常被定義為該類的(

C)成員。

A.私有

B.保護

C.公用

D.友元

28.假定AB為一個類,則執行“ABx;”語句時將自動調用該類的(

B)。

A.帶參構造函數

B.無參構造函數

C.拷貝構造函數

D.賦值重載函數

29.假定AB為一個類,則執行“ABx(a,5);”語句時將自動調用該類的(

A

)。

A.帶參構造函數

B.無參構造函數

C.拷貝構造函數

D.賦值重載函數

30.假定AB為一個類,則執行“AB*s=newAB(a,5);”語句時得到的一個動態對象為____D___。

A.s

B.s->a

C.s.a

D.*s

31.假定AB為一個類,則執行“ABr1=r2;”語句時將自動調用該類的(

D

)。

A.無參構造函數

B.帶參構造函數

C.賦值重載函數

D.拷貝構造函數

32.若需要使類中的一個指針成員指向一塊動態存儲空間,則通常在(

B

)函數中完成。

A.析構

B.構造

C.任一成員

D.友元

33.當類中的一個整型指針成員指向一塊具有n*sizeof(int)大小的存儲空間時,它最多能夠存儲(

A)個整數。

A.n

B.n+1

C.n-1

D.1

34.假定一個類的構造函數為“A(intaa,intbb){a=aa;b=aa*bb;}”,則執行“A

x(4,5);”語句后,x.a和x.b的值分別為(

C)。

A.4和5

B.5和4

C.4和20

D.20和5

35.假定一個類的構造函數為“A(intaa=1,intbb=0){a=aa;b=bb;}”,則執行“Ax(4);”語句后,x.a和x.b的值分別為(

D

)。

A.1和0

B.1和4

C.4和1

D.4和0

36.假定AB為一個類,則(

B)為該類的拷貝構造函數的原型說明。

A.AB(ABx);

B.AB(AB&x);

C.voidAB(AB&x);

D.AB(intx);

37.假定一個類的構造函數為“B(intax,intbx):a(ax),b(bx){}”,執行“Bx(1,2),y(3,4);x=y;”語句序列后x.a的值為(

C

)。

A.1

B.2

C.3

D.4

38.假定一個類AB只含有一個整型數據成員a,當用戶不定義任何構造函數時,系統為該類定義的無參構造函數為(

D)。

A.AB(){a=0;}

B.AB(intaa=0):a(aa){}

C.AB(intaa):a(aa){}

D.AB(){}

39.假定一個類AB只含有一個整型數據成員a,用戶為該類定義的帶參構造函數可以為(

C)。

A.AB(){}

B.AB():a(0){}

C.AB(intaa=0){a=aa;}

D.AB(intaa){}

40.對于任一個類,用戶所能定義的構造函數的個數至多為(

D

)。

A.0

B.1

C.2

D.任意個

41.對于任一個類,用戶所能定義的析構函數的個數至多為(

B)。

A.0

B.1

C.2

D.任意個

42.假定AB為一個類,則執行“AB*px=newAB[n];”語句時將(

A

)。

A.動態分配一個數組

B.動態分配一個對象

C.靜態分配一個數組

D.靜態分配一個對象

43.設px是指向一個類對象的指針變量,則執行“deletepx;”語句時,將自動調用該類的(

C

)。

A.無參構造函數

B.帶參構造函數

C.析構函數

D.拷貝構造函數

44.當一個類對象離開它的作用域時,系統自動調用該類的(

D)。

A.無參構造函數

B.帶參構造函數

C.拷貝構造函數

D.析構函數

45.假定一個類對象數組為A[n],當離開它定義的作用域時,系統自動調用該類析構函數的次數為(

C)。

A.0

B.1

C.n

D.n-1

46.假定AB為一個類,則執行“ABa[10];”語句時調用該類無參構造函數的次數為(

D

)。

A.0

B.1

C.9

D.10

47.假定AB為一個類,則執行“AB*px=newAB[n];”語句時調用該類無參構造函數的次數為(

A)。

A.n

B.n-1

C.1

D.0

48.假定AB為一個類,則執行“ABa,b(3),*p;”語句時共調用該類構造函數的次數為(

A

)。

A.2

B.3

C.4

D.5

49.假定AB為一個類,則執行“ABa(2),b[3],*p[4];”語句時共調用該類構造函數的次數為(B

)。

A.3

B.4

C.5

D.9

50.假定AB為一個類,則執行“ABa,b(2),c[3],*p=&a;”語句時共調用該類無參構造函數的次數為(

D)。

A.5

B.6

C.3

D.4

51.假定AB為一個類,則執行“AB*p=newAB(1,2);”語句時共調用該類構造函數的次數為(

B)。

A.0

B.1

C.2

D.3

52.假定AB為一個類,px為指向該類的一個含有n個對象的動態數組的指針,則執行“delete[]px;”語句時共調用該類析構函數的次數為(

C

)。

A.0

B.1

C.n

D.n+1

53.對類對象成員的初始化是通過構造函數中給出的(

D

)實現的。

A.函數體

B.初始化表

C.參數表

D.初始化表或函數體

54.對類中常量成員的初始化是通過構造函數中給出的(

C

)實現的。

A.函數體

B.參數表

C.初始化表

D.初始化表或函數體

55.對類中引用成員的初始化是通過構造函數中給出的(

C)實現的。

A.函數體

B.參數表

C.初始化表

D.初始化表或函數體

56.一個類的靜態數據成員所表示屬性(

C

)。

A.是類的或對象的屬性

B.只是對象的屬性

C.只是類的屬性

D.類和友元的屬性

57.類的靜態成員的訪問控制(

D

)。

A.只允許被定義為private

B.只允許被定義為private或protected

C.只允許被定義為public

D.可允許被定義為private、protected或public

58.靜態成員函數對類的數據成員訪問(

B

)。

A.是不允許的

B.只允許是靜態數據成員

C.只允許是非靜態數據成員

D.可允許是靜態數據成員或非靜態數據成員

59.被非靜態成員函數訪問的類的數據成員(

A)。

A.可以是非靜態數據成員或靜態數據成員

B.不可能是類的靜態數據成員

C.只能是類的非靜態數據成員

D.只能是類的靜態數據成員

60.靜態數據成員的初始化是在(

D)中進行的。

A.構造函數

B.任何成員函數

C.所屬類

D.全局區

61.當將一個類A或函數f()說明為另一個類B的友元后,類A或函數f()能夠直接訪問類B的(

D

)。

A.只能是公有成員

B.只能是保護成員

C.只能是除私有成員之外的任何成員

D.具有任何權限的成員

62.引入友元的主要目的是為了(

C

)。

A.增強數據安全性

B.提高程序的可靠性

C.提高程序的效率和靈活性

D.保證類的封裝性

63.一個類的成員函數也可以成為另一個類的友元函數,這時的友元說明(

A

)。

A.需加上類域的限定

B.不需加上類域的限定

C.類域的限定可加可不加

D.不需要任何限定

64.一個類的友元不是該類的成員,與該類的關系密切,所以它(

D

)。

A.有this指針,有默認操作的對象

B.沒有this指針,可以有默認操作的對象

C.有this指針,不能執行默認操作

D.沒有this指針,也就沒有默認操作的對象二、程序填充題1.已知一個類的定義如下:#include<iostream.h>classAA{ inta[10]; intn;public: voidSetA(intaa[],intnn);//用數組aa初始化數據成員a,用nn初始化數據成員n intMaxA();//從數組a中前n個元素中查找最大值voidSortA();//采用選擇排序的方法對數組a中前n個元素,進行從小到大排序voidInsertA();//采用插入排序的方法對數組a中前n個元素進行從小到大排序 voidPrintA();//依次輸出數組a中的前n個元素};該類中MaxA()函數的實現如下,請在標號位置補充適當的內容。int____(1)__AA::Max()___{ intx=a[0]; for(inti=1;i<n;i++) if(a[i]>x)___(2)x=a[i]___; ___(3)_returnx__;}2.已知一個類的定義如下:#include<iostream.h>classAA{ inta[10]; intn;public: voidSetA(intaa[],intnn);//用數組aa初始化數據成員a,用nn初始化數據成員n intMaxA();//從數組a中前n個元素中查找最大值voidSortA();//采用選擇排序的方法對數組a中前n個元素,進行從小到大排序voidInsertA();//采用插入排序的方法對數組a中前n個元素進行從小到大排序 voidPrintA();//依次輸出數組a中的前n個元素};voidAA::SortA(){ inti,j; for(i=0;___(1)i<n-1或i<=n-2___;i++){ intx=a[i],k=i; for(j=i+1;j<n;j++) if(a[j]<x)___(2)_{x=a[j];k=j}__ a[k]=a[i]; ___(3)a[i]=x___; }}3.已知一個類的定義如下:#include<iostream.h>classAA{ inta[10]; intn;public: voidSetA(intaa[],intnn);//用數組aa初始化數據成員a,用nn初始化數據成員n intMaxA();//從數組a中前n個元素中查找最大值voidSortA();//采用選擇排序的方法對數組a中前n個元素,進行從小到大排序voidInsertA();//采用插入排序的方法對數組a中前n個元素進行從小到大排序 voidPrintA();//依次輸出數組a中的前n個元素};void___(1)__AA::Insert()_{ inti,j; for(i=1;i<n;i++){ intx=a[i]; for(j=i-1;j>=0;j--) if(x<a[j])___(2)_a[j+1]=a[j]__; else___(3)break___; a[j+1]=x; }}4.已知一個類的定義如下:#include<iostream.h>classAA{ inta[10]; intn;public: voidSetA(intaa[],intnn);//用數組aa初始化數據成員a,用nn初始化數據成員n intMaxA();//從數組a中前n個元素中查找最大值voidSortA();//采用選擇排序的方法對數組a中前n個元素,進行從小到大排序voidInsertA();//采用插入排序的方法對數組a中前n個元素進行從小到大排序 voidPrintA();//依次輸出數組a中的前n個元素,最后輸出一個換行};使用該類的主函數如下:voidmain(){ inta[10]={23,78,46,55,62,76,90,25,38,42}; AAx; ___(1)__x.SetA(a,6)_; intm=___(2)_x.MaxA()__; ___(3)_x.PrintA()__; cout<<m<<endl;}該程序運行結果為:237846556276785.已知一個類的定義如下:#include<iostream.h>classAA{ inta[10]; intn;public: voidSetA(intaa[],intnn);//用數組aa初始化數據成員a,用nn初始化數據成員n intMaxA();//從數組a中前n個元素中查找最大值voidSortA();//采用選擇排序的方法對數組a中前n個元素,進行從小到大排序 voidPrintA();//依次輸出數組a中的前n個元素,最后輸出一個換行};使用該類的主函數如下:voidmain(){ inta[10]={23,78,46,55,62,76,90,25,38,42}; ___(1)_AAx__; x.SetA(a,8); int___(2)_m=x.MaxA()__; ___(3)_x.Sort()__; x.PrintA();cout<<m<<endl;}該程序運行結果為:2325465562767890906.已知一個利用數組實現棧的類定義如下:constintARRAY_SIZE=10;classStack{public: voidInit(){top=-1;}//初始化棧為空voidPush(intnewElem);//向棧中壓入一個元素 intPop();//從棧頂彈出一個元素 boolEmpty(){//判棧空if(top==-1)returntrue;elsereturnfalse;} intDepth(){returntop+1;}//返回棧的深度 voidPrint();//按照后進先出原則依次輸出棧中每個元素,直到棧空為止private: intelem[ARRAY_SIZE];//用于保存棧元素的數組 inttop;//指明棧頂元素位置的指針};voidStack::Push(intnewElem){ if(___(1)_top==ARRAY_SIZE-1__){ cout<<"棧滿!"<<endl; exit(1);//中止運行 } ___(2)top++或(++top)___; elem[top]=___(3)_newElem__;}7.已知一個利用數組實現棧的類定義如下:constintARRAY_SIZE=10;classStack{public: voidInit(){top=-1;}//初始化棧為空voidPush(intnewElem);//向棧中壓入一個元素 intPop();//從棧頂彈出一個元素 boolEmpty(){//判棧空if(top==-1)returntrue;elsereturnfalse;} intDepth(){returntop+1;}//返回棧的深度 voidPrint();//按照后進先出原則依次輸出棧中每個元素,直到棧空為止private: intelem[ARRAY_SIZE];//用于保存堆棧元素的數組 inttop;//指明棧頂元素位置的指針};該類的Pop和Print函數的實現分別如下:___(1)_intStack::Pop__{ if(top==-1){ cout<<"棧空!"<<endl; exit(1);//中止運行 } return___(2)_elem[top--]__;}voidStack::Print(){ while(!Empty()) cout<<___(3)_Pop()__<<'';}8.classA{inta;public:A(){a=0;}___(1)A(intaa):a(aa)___{}//定義構造函數,用參數aa初始化數據成員a};main(){___(2)_A*p__;//定義類A的指針對象p___(3)p=newA(5)__;//用p指向動態對象并初始化為整數5}9.classA{char*a;public:___(1)_A(){a=0;}__//定義無參構造函數,使a的值為空A(char*aa){a=___(2)_newchar[strlen(aa)+1]__;strcpy(a,aa);//用aa所指字符串初始化a所指向的動態存儲空間}___(3)_~A(){delete[]a}__//定義析構函數,刪除a所指向的動態存儲空間};10.classA{inta,b;public:A(intaa=0,intbb=0):a(aa),b(bb)___(1)___{}//分別用aa和bb對應初始化a和b};main(){___(2)Ax(5),y(x)___;//定義類A的對象x并用5初始化,同時定義y并用x初始化___(3)_A*p=x__;//定義p指針,使之指向對象x}11.classA{inta,b;public:___(1)_A(intaa=0,intbb=0){a=aa;b=bb;}__//定義構造函數,使參數aa和bb的默認值為0,//在函數體中用aa初始化a,用bb初始化b};main(){A*p1,*p2;___(2)_p1=newA__;//調用無參構造函數生成由p1指向的動態對象___(3)_p2=newA(4,5)__;//調用帶參構造函數生成由p2指向的動態對象,//使a和b成員分別被初始化為4和5}12.#include<iostream.h>#include<stdlib.h>classA{int*a;intn;intMaxLen;public:A():a(0),n(0),MaxLen(0){}A(int*aa,intnn,intMM){n=nn;MaxLen=MM;if(n>MaxLen)exit(1);___(1)a=newint[Maxlen]___;//由a指向長度為MaxLen的動態數組for(inti=0;i<n;i++)a[i]=aa[i];}~A(){delete[]a;}intGetValue(inti)___(2)_returna[i];__//函數體返回a[i]的值};voidmain(){intb[10]={1,2,3,4,5,6,7,8,9,10}; Ar(b,10,10);inti,s=0;for(i=0;i<10;i++)___(3)s+=r.GetValue(i);___//把r對象的a數據成員中的每個//元素值依次累加到s中cout<<"s="<<s<<endl;}13.#include<iostream.h>#include<stdlib.h>classA{int*a;intn;intMaxLen;public:A():a(0),n(0),MaxLen(0){}A(int*aa,intnn,intMM){n=nn;MaxLen=MM;if(n>MaxLen)exit(1);a=newint[MaxLen];___(1)for(inti=0;i<n;i++)a[i]=aa[i]___;//以i為循環變量把aa數組中每個元素值//傳送給a數組的對應元素中}~A();intGetValue(inti){returna[i];}//函數體返回a[i]的值};___(2)AA::~A(){delete[]a;}___//析構函數的類外定義voidmain(){intb[10]={1,2,3,4,5,6,7,8,9,10}; Ar(b,10,10);inti,s=0;___(3)for(i=0;i<10;i++)s+=r.GetValue(i);___;//以i為循環變量,把r對象的a數據成員中的//每個元素值依次累加到s中cout<<"s="<<s<<endl;}14.一種類定義如下:classGoods{private:chargd_name[20];//商品名稱intweight;//商品重量staticinttotalweight;//同類商品總重量public:Goods(char*str,intw){//構造函數strcpy(gd_name,str);weight=w;totalweight+=weight;}~Goods(){totalweight-=weight;}char*GetN(){___(1)returngd_name___;}//返回商品名稱intGetW(){returnweight;}___(2)_staticint__GetTotal_Weight(){//定義靜態成員函數返回總重量___(3)_returntotalweight__;}}三、寫出下列程序的運行結果1.#include<iostream.h>#include<string.h>classCD{ char*a; intb;public: voidInit(char*aa,intbb) { a=newchar[strlen(aa)+1]; strcpy(a,aa); b=bb; } char*Geta(){returna;} intGetb(){returnb;} voidOutput(){cout<<a<<''<<b<<endl;}}dx; 第1題運行結果:voidmain(){ CDdy; dx.Init("abcdef",30); dy.Init("shenyafen",3*dx.Getb()+5); dx.Output(); dy.Output();}2.#include<iostream.h>#include<string.h>classCD{ char*a; intb;public: voidInit(char*aa,intbb) { a=newchar[strlen(aa)+1]; strcpy(a,aa); b=bb; } char*Geta(){returna;} intGetb(){returnb;} voidOutput(){cout<<a<<''<<b<<endl;}}; 第2題運行結果:voidmain(){ CDdx,dy; chara[20]; dx.Init("abcdef",30); strcpy(a,dx.Geta()); strcat(a,"xyz"); dy.Init(a,dx.Getb()+20); dx.Output(); dy.Output();}3.#include<iostream.h>classCE{private: inta,b; intgetmax(){return(a>b?a:b);}public:intc; 第3題運行結果: voidSetValue(intx1,intx2,intx3){a=x1;b=x2;c=x3; } intGetMax();};intCE::GetMax(){ intd=getmax(); return(d>c?d:c);}voidmain(){ intx=5,y=12,z=8; CEex,*ep=&ex; ex.SetValue(x,y,z); cout<<ex.GetMax()<<endl; ep->SetValue(x+y,y-z,20); cout<<ep->GetMax()<<endl;}4.#include<iostream.h>classCE{private: inta,b; intgetmin(){return(a<b?a:b);}public:intc; voidSetValue(intx1,intx2,intx3){a=x1;b=x2;c=x3; 第4題運行結果: } intGetMin();};intCE::GetMin(){ intd=getmin(); return(d<c?d:c);}voidmain(){ intx=5,y=12,z=8; CE*ep; ep=newCE; ep->SetValue(x+y,y-z,10); cout<<ep->GetMin()<<endl; CEa=*ep; cout<<a.GetMin()*3+15<<endl;}5.#include<iostream.h>classFranction{//定義分數類 intnume;//定義分子 intdeno;//定義分母public://把*this化簡為最簡分數,具體定義在另外文件中實現 voidFranSimp();//返回兩個分數*this和x之和,具體定義在另外文件中實現 FranctionFranAdd(constFranction&x);//置分數的分子和分母分別0和1 voidInitFranction(){nume=0;deno=1;}//置分數的分子和分母分別n和d voidInitFranction(intn,intd){nume=n;deno=d;} //輸出一個分數 voidFranOutput(){cout<<nume<<'/'<<deno<<endl;}}; voidmain(){ Franctiona,b,c,d; a.InitFranction(7,12); b.InitFranction(-3,8); c.InitFranction(); c=a.FranAdd(b); d=c.FranAdd(a); cout<<"a:";a.FranOutput(); cout<<"b:";b.FranOutput(); cout<<"c:";c.FranOutput(); cout<<"d:";d.FranOutput();} 第5題答案:a:7/12 b:-3/8 c:5/24 d:19/246.#include<iostream.h>classFranction{//定義分數類 intnume;//定義分子 intdeno;//定義分母public://把*this化簡為最簡分數,具體定義在另外文件中實現 voidFranSimp();//返回兩個分數*this和x之和,具體定義在另外文件中實現 FranctionFranAdd(constFranction&x);//置分數的分子和分母分別0和1 voidInitFranction(){nume=0;deno=1;}//置分數的分子和分母分別n和d voidInitFranction(intn,intd){nume=n;deno=d;} //輸出一個分數 voidFranOutput(){cout<<nume<<'/'<<deno<<endl;}}; voidmain(){ Franctiona,b,c,d; a.InitFranction(6,15); b.InitFranction(3,10); c.InitFranction(); c=a.FranAdd(b); d=c.FranAdd(a);第6題答案: cout<<"a:";a.FranOutput();a:6/15 cout<<"b:";b.FranOutput(); b:3/10 cout<<"c:";c.FranOutput(); c:7/10 cout<<"d:";d.FranOutput(); d:11/10}7.#include<iostream.h>#include<string.h>classA{char*a;public:A(char*s){ 第7題運行結果:a=newchar[strlen(s)+1];strcpy(a,s);cout<<a<<endl;}~A(){ delete[]a; cout<<"Destructor!"<<endl;}};voidmain(){Ax("xuxiaokai");A*y=newA("weirong");deletey;}8.#include<iostream.h>classA{int*a;public:A(intx=0):a(newint(x)){}~A(){deletea;}intgetA(){return*a;}voidsetA(intx){*a=x;}};voidmain(){Ax1,x2(3); 第8題運行結果:A*p=&x2; p->setA(x2.getA()+5);x1.setA(15+x1.getA()); cout<<x1.getA()<<''<<x2.getA()<<endl;}9.#include<iostream.h>classA{inta;public:A(intaa=0):a(aa){cout<<a<<'';}~A(){cout<<"Xxk";}};voidmain(){ 第9題運行結果:A*p; Ax[3]={1,2,3},y=4; cout<<endl; p=newA[3];cout<<endl;delete[]p; cout<<endl;}10.#include<iostream.h>classA{inta,b;public:A(){a=b=0;}A(intaa,intbb){a=aa;b=bb;} intSum(){returna+b;} 第10題運行結果: int*Mult(){ int*p=newint(a*b); returnp; }};voidmain(){int*k; Ax(2,3),*p;p=newA(4,5);cout<<x.Sum()<<''<<*(x.Mult())<<endl;cout<<p->Sum()<<''<<*(k=p->Mult())<<endl;deletek;}11.#include<iostream.h>classA{inta[10];intn;public:A(intaa[],intnn):n(nn){for(inti=0;i<n;i++)a[i]=aa[i];}intGet(inti){returna[i];} 第11題運行結果: intSumA(intn){ ints=0; for(intj=0;j<n;j++)s+=a[j]; returns; }};voidmain(){inta[]={2,5,8,10,15,20};Ax(a,4); Ay(a,6);intd=1; for(inti=0;i<4;i++)d*=x.Get(i);intf=y.SumA(5); cout<<"d="<<d<<endl; cout<<"f="<<f<<endl;}12.#include<iostream.h>classA{inta,b;public:A(intaa,intbb){a=aa;b=bb;}floatMultip(charop){switch(op){case'+':returna+b;case'-':returna-b;case'*':returna*b;case'/':if(b!=0)returnfloat(a)/b; else{cout<<"除數為0!"<<endl;return0;} default:cout<<'\n'<<op<<"非法運算符!"<<endl; return0;}}};voidmain(){Ax(10,4);chara[6]="+-*/@";inti=0; 第12題運行結果:while(a[i]){ floatk=x.Multip(a[i]); if(k!=0)cout<<k<<''; i++; }cout<<endl;}四、程序設計題1.根據下面類中Count函數成員的原型和注釋寫出它的類外定義。classAA{ int*a; intn; intMS;public: voidInitAA(intaa[],intnn,intms){ if(nn>ms){cout<<"Error!"<<endl;exit(1);} MS=ms; n=nn; a=newint[MS]; for(inti=0;i<MS;i++)a[i]=aa[i]; } intCount(intx);//從數組a的前n個元素中統計出其值等于x的個數并返回。};第1題答案:intAA::Count(intx){inti,c=0;for(i=0;i<n;i++)if(a[i]==x)c++;returnc;}2.根據下面類中Search函數成員的原型和注釋寫出它的類外定義。classAA{ int*a; intn; intMS;public: voidInitAA(intaa[],intnn,intms){ if(nn>ms){cout<<"Error!"<<endl;exit(1);} MS=ms; n=nn; a=newint[MS]; for(inti=0;i<MS;i++)a[i]=aa[i]; }intSearch(intx);//從數組a的前n個元素中順序查找值為x的元素, //若查找成功則返回元素的下標,否則返回-1。};第2題答案:intAA::Search(intx){inti;for(i=0;i<n;i++)if(a[i]==x)returni;return-1;}3.根據下面類中MaxMin函數成員的原型和注釋寫出它的類外定義。classAA{ int*a; intn; intMS;public: voidInitAA(intaa[],intnn,intms){ if(nn>ms){cout<<"Error!"<<endl;exit(1);} MS=ms; n=nn; a=newint[MS]; for(inti=0;i<MS;i++)a[i]=aa[i]; }intMaxMin(int&x,int&y);//從數組a的前n個元素中求出//最大值和最小值,并分別由引用參數x和y帶回,//同時若n大于0則返回1,否則返回0。};第3題答案:intAA::MaxMin(intx,inty){intmx,my;mx=my=a[0];for(inti=1;i<n;i++){if(a[i]>mx)mx=a[i];if(a[i]<my)my=a[i];}x=mx;y=my;if(n>0)return1;elsereturn0;}4.根據下面類中Compare函數成員的原型和注釋寫出它的類外定義。classAA{ int*a; intn; intMS;public: voidInitAA(intaa[],intnn,intms){ if(nn>ms){cout<<"Error!"<<endl;exit(1);} MS=ms; n=nn; a=newint[MS]; for(inti=0;i<MS;i++)a[i]=aa[i]; }intCompare(AAb);//比較*this與b的大小,若兩者中//的n值相同,并且數組中前n個元素值對應//相同,則認為兩者相等返回1,否則返回0。};第4題答案:intAA::Compare(AAb){if(n!=b.n)return0;for(inti=0;i<n;i++)if(a[i]!=b.a[i])return0;return1;}5.根據下面類中CompareBig函數成員的原型和注釋寫出它的類外定義。classAA{ int*a; intn; intMS;public: voidInitAA(intaa[],intnn,intms){ if(nn>ms){cout<<"Error!"<<endl;exit(1);} MS=ms; n=nn; a=newint[MS]; for(inti=0;i<MS;i++)a[i]=aa[i]; }intCompareBig(AAb);//比較*this與b的大小,從前向后按兩數組//中的對應元素比較,若*this中元素值大則返回1,若b中//元素值大則返回-1,若相等則繼續比較下一個元素,直到//一個數組中無元素比較,此時若兩者的n值相同則返回0,//否則若*this中的n值大則返回1,若b中的n值大則返回-1。};第5題答案:intAA::CompareBig(AAb){intk;if(n>b.n)k=b.n;elsek=n;for(inti=0;i<k;i++)if(a[i]>b.a[i])return1;elseif(a[i]<b.a[i])return-1;if(k==nk==b.n)return0;elseif(k<n)return1;elsereturn-1;}6.根據下面類中Reverse函數成員的原型和注釋寫出它的類外定義。classAA{ int*a; intn; intMS;public: voidInitAA(intaa[],intnn,intms){ if(nn>ms){cout<<"Error!"<<endl;exit(1);} MS=ms; n=nn; a=newint[MS]; for(inti=0;i<MS;i++)a[i]=aa[i]; }AA*Reverse();//對于調用該函數的對象,將其a數組中前n個//元素值按相反的次序排列,返回指向該對象的指針。};第6題答案:AA*AA::Reverse(){inti,x;for(i=0;i<n/2;i++){x=a[i];a[i]=a[n-1-i];a[n-1-i]=x;}returnthis;}7.根據下面類中Reverse1函數成員的原型和注釋寫出它的類外定義。classAA{ int*a; intn; intMS;public: voidInitAA(intaa[],intnn,intms){ if(nn>ms){cout<<"Error!"<<endl;exit(1);} MS=ms; n=nn; a=newint[MS]; for(inti=0;i<MS;i++)a[i]=aa[i]; }AA*Reverse1();//通過動態存儲分配得到一個對象,并動態分配//a[MS]數組空間,要求該對象中的n和MS的值與*this中的//對應成員的值相同,數組元素的值是按照*this中數組元//素的相反次序排列得到的,要求該函數返回動態對象的地址。};第7題答案:AA*AA::Reverse1(){AA*px=newAA;px->n=n;px->MS=MS;px->a=newint[MS];for(inti=0;i<n;i++){px->a[n-1-i]=a[i];}returnpx;}8.根據下面類中構造函數的原型和注釋寫出它的類外定義。classArray{ int*a;//指向動態分配的整型數組空間 intn;//記錄數組長度public: Array(intaa[],intnn);//構造函數,利用aa數組長度nn初始化n, //利用aa數組初始化a所指向的數組空間 Array(Array&aa);//拷貝構造函數 Array&Give(Array&aa);//實現aa賦值給*this的功能并返回*thisArrayUion(Array&aa);//實現*this和aa中的數組合并的 //功能,把合并結果存入臨時對象并返回 intLenth(){returnn;}//返回數組長度 voidPrint(){//輸出數組 for(inti=0;i<n;i++) cout<<a[i]<<''; cout<<endl; }};第8題答案:Array::Array(intaa[],intnn){n=nn;a=newint[n];for(inti=0;i<n;i++)a[i]=aa[i];}9.根據下面類中拷貝構造函數的原型寫出它的類外定義。classArray{ int*a;//指向動態分配的整型數組空間 intn;//記錄數組長度public: Array(intaa[],intnn);//構造函數,利用aa數組長度nn初始化n, //利用aa數組初始化a所指向的數組空間 Array(Array&aa);//拷貝構造函數 Array&Give(Array&aa);//實現aa賦值給*this的功能并返回*thisArrayUion(Array&aa);//實現*this和aa中的數組合并的 //功能,把合并結果存入臨時對象并返回 intLenth(){returnn;}//返回數組長度 voidPrint(){//輸出數組 for(inti=0;i<n;i++) cout<<a[i]<<''; cout<<endl; }};第9題答案:Array::Array(Arrayaa){n=aa.n;a=newint[n];for(inti=0;i<n;i++)a[i]=aa.a[i];}10.根據下面類中Give函數的原型和注釋寫出它的類外定義。classArray{ int*a;//指向動態分配的整型數組空間 intn;//記錄數組長度public: Array(intaa[],intnn);//構造函數,利用aa數組長度nn初始化n, //利用aa數組初始化a所指向的數組空間 Array(Array&aa);//拷貝構造函數 Array&Give(Array&aa);//實現aa賦值給*this的功能并返回*thisArrayUion(Array&aa);//實現*this和aa中的數組合并的功能,把合并結果存入臨時對象并返回 intLenth(){returnn;}//返回數組長度 voidPrint(){//輸出數組 for(inti=0;i<n;i++) cout<<a[i]<<''; cout<<endl; }};第10題答案:ArrayArray::Give(Arrayaa){delete[]a;n=aa.n;a=newint[n];for(inti=0;i<n;i++)a[i]=aa.a[i];return*this;}11.根據下面類中Uion函數的原型和注釋寫出它的類外定義。classArray{ int*a;//指向動態分配的整型數組空間 intn;//記錄數組長度public: Array(intaa[],intnn);//構造函數,利用aa數組長度nn初始化n, //利用aa數組初始化a所指向的數組空間 Array(Array&aa);//拷貝構造函數 Array&Give(Array&aa);//實現aa賦值給*this的功能并返回*thisArrayUion(Array&aa);//實現*this和aa中的數組合并的功能,把合并//結果(其長度為兩數組長度之和)存入臨時對象并返回 intLenth(){returnn;}//返回數組長度 voidPrint(){//輸出數組 for(inti=0;i<n;i++) cout<<a[i]<<''; cout<<endl; }};第11題答案:ArrayArray::Uion(Arrayaa){intk=n+aa.n;int*w=newint[k];inti;for(i=0;i<n;i++)w[i]=a[i];for(i=0;i<aa.n;i++)w[i+n]=aa.a[i];Arrayr(w,k);returnr;}12.根據下面類中構造函數的原型和注釋寫出它的類外定義。classStrings{ char*s;//指向動態分配的字符串數組空間 intn;//記錄字符串長度public: Strings(char*str);//構造函數,利用str字符串長度初始化n, //利用str字符串初始化s所指的字符串空間 Strings(Strings&str);//拷貝構造函數 Strings&Give(Strings&str);//實現str賦值給*this的功能StringsUion(Strings&str);//實現*this和str中的字符串合并的 //功能,把合并結果存入臨時對象并返回 intLenth(){returnn;}//返回字符串長度 voidPrint(){cout<<s<<endl;}//輸出字符串};第12題答案:Strings::Strings(char*str){n=strlen(str);s=newchar[n+1];strcpy(s,str);}13.根據下面類中拷貝構造函數的原型寫出它的類外定義。classStrings{ char*s;//指向動態分配的字符串數組空間 intn;//記錄字符串長度public: Strings(char*str);//構造函數,利用str字符串長度初始化n, //利用str字符串初始化s所指的字符串空間 Strings(Strings&str);//拷貝構造函數 Strings&Give(Strings&str);//實現str賦值給*this的功能StringsUion(Strings&str);//實現*this和str中的字符串合并的 //功能,把合并結果存入臨時對象并返回 intLenth(){returnn;}//返回字符串長度 voidPrint(){cout<<s<<endl;}//輸出字符串};第13題答案:Strings::Strings(Stringsstr){n=str.n;s=newchar[n+1];strcpy(s,str.s);}14.根據下面類中Give函數的原型和注釋寫出它的類外定義。classStrings{ char*s;//指向動態分配的字符串數組空間 intn;//記錄字符串長度public: Strings(char*str);//構造函數,利用str字符串長度初始化n, //利用str字符串初始化s所指的字符串空間 Strings(Strings&str);//拷貝構造函數 Strings&Give(Strings&str);//實現str賦值給*this的功能并返回*thisStringsUion(Strings&str);//實現*this和str中的字符串合并的 //功能,把合并結果存入臨時對象并返回 intLenth(){returnn;}//返回字符串長度 voidPrint(){cout<<s<<endl;}//輸出字符串};第14題答案:StringsStrings::Give(Stringsstr){delete[]s;n=str.n;s=newchar[n+1];strcpy(s,str.s);return*this;}15.根據下面類中Uion函數的原型和注釋寫出它的類外定義。classStrings{ char*s;//指向動態分配的字符串數組空間 intn;//記錄字符串長度public: Strings(char*str);//構造函數,利用str字符串長度初始化n,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論