2023年面向?qū)ο蟪绦蛟O(shè)計考前復(fù)習(xí)題及答案_第1頁
2023年面向?qū)ο蟪绦蛟O(shè)計考前復(fù)習(xí)題及答案_第2頁
2023年面向?qū)ο蟪绦蛟O(shè)計考前復(fù)習(xí)題及答案_第3頁
2023年面向?qū)ο蟪绦蛟O(shè)計考前復(fù)習(xí)題及答案_第4頁
2023年面向?qū)ο蟪绦蛟O(shè)計考前復(fù)習(xí)題及答案_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

簡答題1、傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計的優(yōu)點和缺陷是什么?優(yōu)點:(1)這種程序設(shè)計方法力求算法描述準確。(2)對每一子過程模塊容易進行程序?qū)Φ男宰C明。缺陷:(1)這種程序設(shè)計方法本質(zhì)上是面向“過程”的,而“過程”和“操作”又是不稔定和多變的,因此不能直接反映人類求解問題的思緒。(2)程序代碼可重用性差。程序中除少數(shù)標準庫函數(shù)外,每設(shè)計?個程序時,程序員幾乎從零做起。即使重用代碼,通常也是通過拷貝或編輯重新生成一份。(3)維護程序的一致性困難。該種方法將數(shù)據(jù)與對數(shù)據(jù)進行解決的程序代碼分離。2、什么是對象?每個對象都具有屬性(Attribute)和方法(Meth。d)這兩方面的特性。對象的屬性描述了對象的狀態(tài)和特性,對象的方法說明了對象的行為和功能,并且對象的屬性值只應(yīng)由這個對象的方法來讀取和修改,兩者結(jié)合在一起就構(gòu)成了對象的完整描述。3、什么是消息?在面向?qū)ο蟮某绦蛟O(shè)計中,由于對象描述了客觀實體,它們之間的聯(lián)系通過對象間的聯(lián)系來反映。當(dāng)?個對象需要此外一個對象提供服務(wù)時,它向?qū)Ψ桨l(fā)出?個服務(wù)請求,而收到請求的對象會響應(yīng)這個請求并完畢指定的服務(wù)。這種向?qū)ο蟀l(fā)出的服務(wù)請求就稱為消息。4、什么是多態(tài)性?所謂多態(tài)性是指當(dāng)程序中的其他部分發(fā)出同樣的消息時,按照接受消息對象的不同可以自動執(zhí)行類中相應(yīng)的方法。其好處是,用戶不必知道某個對象所屬的類就可以執(zhí)行多態(tài)行為,從而為程序設(shè)計帶來更大方便。5、什么是面向?qū)ο蟮某绦蛟O(shè)計方法?這種方法將設(shè)計目的從模擬現(xiàn)實世界的行為轉(zhuǎn)向了模擬現(xiàn)實世界中存在的對象及其各自的行為。

ca1lcd"<<endl;}{b2=va12;cout?"base2isca1lcd"<<endl;});classD:publieBl,publicB2{protected:intd;publie:D(intval1,intva12,intval3);};D::D(intvail,intva12?intva13):B1(va11),B2(val2){d=val3;cout?"derivedclassiscalied”;}voidmain(){Ddobj(l,2,3);}3.#include<windows.h>#inc1ude<iostream.h>classmarried{private:intnumber;char*name?pub1ic:staticintglob?voidset_mes(char*a);voidmarried::set_mes(char*a){name=newcharfstrlen(a)+1];{name=newstrcpy(name,a);。number=+4-glob?cout?"編號:"vVnumber?endl;)intmarried::gIob=0;voidmain(){marriedperson”00];inti:gcharstr[8]cout<<end1;for(i=0;i<3;i++)g{cout?"輸入姓名:":cin?s

person[i].set_mes(str);cout?end1;)假定輸入zhang/wangZ1i/請寫出程序的結(jié)果。#include<iostream,h>tempiatc<c1assT,intI>classABCprivate:Tarray[I];。。public:voidset(intx>{inti;for(i=0;i<I;i++)array[i]=x+i;)voidget()。{cout<<"\n數(shù)組元素總數(shù)為:"VvI?end1;coul?"array["?I-1?"]="<<array[I-1]?endl;1;voidmain(){ABC<int,50>abcl;abc1.set(0);abcl.get();ABC<int,1(K)>abc2;abc2.set(10);abc2.get();}程序運營結(jié)果:5.#include<iostream.h>classStudent{public:Student(){cout?*,constructstudent.\n";semeshours=l()();gpa=3.5;protected:intsemeshours;f1oatgPa;);classTeacher{pub1ic:Teacher(){cout<<,,construetTeacher.Vn',;);classTourpair{public:Tourpair(){coutvv“constructtourpair.\n";nomeeting=();}protected:Studentstudent;Teacherteacher;intnomeeting;);voidmain(){Tourpairtp;cout<V"backinmain.\n”;}classMyclass{private:intx;iniy;publie:Myc1ass(inta,intb){x=a;y=b;)voidprint();voidmyfunc();};voidMyc1ass::print(){cout<<"x=*'<<x<<","?',y=',?y?endI;}voidMyclass::myfunc(){intx=9,y=10;cout?nInmyfunc:x=n?x<<'*,"<<"y=,,<<y?end1:cout<<"Myc1ass::x="<VMyclass::x<?Myclass::y=u<<Myc1ass::y?end1;)voidmain(){Myclasstest(100,200);test.print();//通過對象名訪問公有成員test.myfunc();}#include<iostream,h>classA{private:inta;pub1ic:A(inti=0){a=i;}voidprint(););voidA::print(){cout?”Inc1assA,print()iscalled.M<<endl;)classB:pub1icA(private:intb;public:B(intj=-l){b=j;)};voidcommfun(A&aref){aref.print();}voidmain()(Aa;commfun(a);Bb;commfun(b);#include"iostream.h"classXl(){private:intx;public:Xl(inti){x=i;}intgetx();friendvoidsum(X1&a,X1&b);};intX1::gctx(){returnx;}voidsum(XI&a,X1&b>{cout<V"用友元函數(shù)求各和:"<<a.x+b.x?endl;)voidsum1(X1&a,X1&b){cout<<”用普通函數(shù)調(diào)用類公共接口函數(shù)求和:”?a.getx()+b.getx()?end1;)voidmain(){XIm(l);XIn(2);sum(m,n);sum1(m,n);)答案:.執(zhí)行結(jié)果如下:構(gòu)造新同學(xué):Noname構(gòu)造新同學(xué):zhang構(gòu)造copyofzhang構(gòu)造指導(dǎo)教師析構(gòu)copyofzhang析購zhang析構(gòu)Noname.該程序的執(zhí)行結(jié)果是:basclisca11cdbase2iscailedderivedclassiscalied.程序的結(jié)果:Zhang編號1Wang編號2Li編號3.程序的結(jié)果:數(shù)組元素總數(shù)為:50array[49]=49數(shù)組元素總數(shù)為:100array[99]=109.其執(zhí)行結(jié)果是:conslructstudent.constructteacher.constructtourpair.backininain..程序的運營結(jié)果為:x=100,y=200Inmyfunc:x=9,y=10Myclass::x=100,Myclass::y=200.程序的運營結(jié)果為:Inc1assA,print()iscalied.InclassA,print()iscalled..程序的運營結(jié)果為:用友元函數(shù)求各和:3用普通函數(shù)調(diào)用類公共接口函數(shù)求和:3六、編程題.定義類模板ABC,內(nèi)含成員函數(shù)setflgeto用ABC生成對象abcl和abc2o它們的數(shù)組元素數(shù)不同,顯示的結(jié)果也不同。#include<iostream.h>//定義類模板ABCtemplate<classT,in11>classABC{private:TarrayfI1產(chǎn)〃定義數(shù)組arraypub1ic:voidset(intx)。//定義成員函數(shù)set{inti;for(i=0;i<I;i++)?!ㄑh(huán)I次arrayfi]=x+i;//數(shù)組元素賦值Voidget()。?!ǘx成員函數(shù)get{cout<<n\n數(shù)組元素總數(shù)為:"VvI?endl;cout?uarray["<<I—1<<"]="?array[l—11<<endl;}};voidmain(){//由模板ABC生成對象abclABC<int,5O>abcl;abc1.set(O);〃調(diào)用對象abcl.setabc1.get();〃調(diào)用對象abc1.get//由模板ABC生成對象abc2ABC<int,100>abc2;abc2.set(10);//調(diào)用對象abc2.setabc2.get();//調(diào)用對象abc2.get)^Bui]d_l是一個關(guān)于樓房數(shù)據(jù)的類。它的數(shù)據(jù)成員有posi_x.posi_y和area,分別是樓房位置的經(jīng)、緯度和建筑面積。它的函數(shù)成員只有set1,用于設(shè)立數(shù)據(jù)成員posi.x.posLy和area的值。讓Build_1作為基類,再增長數(shù)據(jù)成員high、函數(shù)成員set2和disp來定義派生類Build_2。#include<iostream.h>c1assBuild_l〃定義基類{protected:intposi_x;//有三個保護型的數(shù)據(jù)成員intposi_y;intarea;在OOP中,將“對象”作為系統(tǒng)中最基本的運營實體,整個程序即由各種不同類型的對象組成,各對象既是一個獨立的實體,又可通過消息互相作用,對象中的方法決定要向哪個對象發(fā)消息、發(fā)什么消息以及收到消息時如何進行解決等。6、面向?qū)ο蠓椒ǖ奶攸c是什么?(1)OOP以“對象”或“數(shù)據(jù)”為中心。由于對象自然地反映了應(yīng)用領(lǐng)域的模塊性,因此具有相對穩(wěn)定性,可以被用作一個組件去構(gòu)成更復(fù)雜的應(yīng)用,乂由于對象一般封裝的是某一實際需求的各種成分,因此,某一對象的改變對整個系統(tǒng)幾乎沒有影響。(2)引入了“類”(class)的概念。類與類以層次結(jié)構(gòu)組織,屬于某個類的對象除具有該類所描述的特性外,還具有層次結(jié)構(gòu)中該類上層所有類描述的所有性質(zhì),OOP中稱這種機制為繼承。(3)00P方法的模塊性與繼承性,保證了新的應(yīng)用程序設(shè)計可在原有對象的數(shù)據(jù)類型和功能的基礎(chǔ)上通過重用、擴展和細化來進行,而不必從頭做起或復(fù)制原有代碼,這樣,大大減少了重新編寫新代碼的工作量,同時減少了程序設(shè)計過程中犯錯的也許性,達成了事半功倍的效果。7、面向?qū)ο蟮某绦蛟O(shè)計方法與結(jié)構(gòu)化程序設(shè)計方法的比較(1)傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計方法以過程為中心構(gòu)造應(yīng)用程序,數(shù)據(jù)和解決數(shù)據(jù)的過程代碼是分離的、互相獨立的實體,設(shè)計出的程序可重用代碼少,且當(dāng)代碼量增長時維護數(shù)據(jù)和代碼的一致性困難。(2)面向?qū)ο蟪绦蛟O(shè)計方法中,對象所具有的封裝性和繼承性使得代碼重用成為也許,并大大減少了程序犯錯的也許性。(3)面向?qū)ο蠓椒ㄎ×私Y(jié)構(gòu)化程序設(shè)計方法的優(yōu)點,同時引入了新概念、新機制并建立了比傳統(tǒng)方法更高層次的抽象。二、選擇題略三、填空題publie:voidset1(intx,inty,inta){posi_x=x;posi_y=y;area=a;});//定義派生類Bui1d_2c1assBuild_2:publieBuild_1{intheight;public:voidset2(inth)height=h;}voiddisp(){cout?"\n經(jīng)度:n?posi—x?endl;cout?M緯度:"v〈posi_y?endI;cout?"高度:"vVheight<<endI;cout<<Mffi^R:"<<area<<endl?endl;}};voidmain(){//用Build_2生成對象。bjBui1d_2obj;obj.setl(100,200,300);obj.set2(400);obj.disp();(1)類是一個支持集成的抽象數(shù)據(jù)類型,而對象是類的【1】O【參考答案】[1]實例(2)在C++語言的面向?qū)ο蟪绦蛟O(shè)計框架中,【2】是程序的基本組成單元?!緟⒖即鸢浮縖2]類(3)C++語言程序的注釋可以出現(xiàn)在程序中的任何地方,一個注釋以【3】作為開始和結(jié)束的標記?!緟⒖即鸢浮縖3]/**/(4)以下程序的輸出結(jié)果是【4】.#include"iostream,h"voidfun(){staticinta;a+=2;cout?a?"}voidmain(){intcc;for(cc=l;cc<4;cc++)fun();cout<<end1;)【參考答案】[4]246(5)下列程序在構(gòu)造函數(shù)和析構(gòu)函數(shù)中申請和釋放類的數(shù)據(jù)成員ini*a,申請時使用形參b初始化a,請?zhí)羁?。classA{public:A(intb);?A();private:int*a;};A::A(intb)(【5】;}A::~A(){【6】;}【參考答案】]a=newint(b);[6]deletea多態(tài)性與【7】和【8】共同構(gòu)成面向?qū)ο蟪绦蛟O(shè)計的三大機制。【參考答案】[7]數(shù)據(jù)封裝【8】繼承(7)將x+y*z中的“"用成員函數(shù)重載,”用友元函數(shù)重載應(yīng)寫為【9】o【參考答案】[9]x.opcrator+(operator*(y,z))(8)派生類的成員一般分為兩部分,一部分是[10],另一部分是自己定義的新成員?!緟⒖即鸢浮縖10]從基類繼承的成員(9)以下程序輸出的結(jié)果是【11】o#inelude"iostream.h"voidmain(){inta=5>b=4,c=3,d;d=(a>b>c);cout?d;}【參考答案】0(10)假如要把返回值為void的函數(shù)A聲明為類B的友元函數(shù),則應(yīng)在類B的定義中加入的語句是【12】?!緟⒖即鸢浮縡riendvoidA();(11)假如類B繼承了類A.則稱類A為類B的基類,類B稱為類A的[13]?!緟⒖即鸢浮縖13]派生類(12)將x+y中的+運算符用友元函數(shù)重載應(yīng)寫為【14】。【參考答案】[14]operator+(x,y)(I3)已知程序的結(jié)果為123,請?zhí)羁铡?inc1udetemp1ateclassA{pub1ic:Tx,y,z;voiddisplay(){cout?x?""?y<<""?z;}};voidmain(){Aa1;[15][17]a1.display();}【參考答案】[15]al.x=1[16]al.y=2[17]al.z=3(14)下列程序段的輸出結(jié)果是[18]ocout?fixed<<509.<<endl:【參考答案】509.123457四、綜合應(yīng)用題.使用VC6打開考生文獻夾下的工程ktl5_3o此工程包含一個ktl5_3.cpp,其中定義了類A、A1和A2,其中Al類由A類公有派生,A2類由Al類公有派生。上述三個類的定義并不完整,請按規(guī)定完畢下列操作,將程序補充完整。(1)定義類A的構(gòu)造函數(shù),該構(gòu)造函數(shù)有一個整型的參數(shù)x,在構(gòu)造函數(shù)中請將x賦值給數(shù)據(jù)成員a。請在注釋“〃**1**”之后添加適當(dāng)?shù)恼Z句。(2)定義類A1的構(gòu)造函數(shù),該構(gòu)造函數(shù)有兩個整型參數(shù)x和y,在構(gòu)造函數(shù)中請將x賦值給數(shù)據(jù)成員b,將y作為基類A構(gòu)造函數(shù)的參數(shù)值傳入。請在注釋“/后添加適當(dāng)?shù)恼Z句。(3)定義類A2的構(gòu)造函數(shù),該構(gòu)造函數(shù)有三個整型的參數(shù)x,y和z,在構(gòu)造函數(shù)中請將x賦值給數(shù)據(jù)成員c,將y和z分別賦值給基類A1構(gòu)造函數(shù)的參數(shù)x和y。請在注釋“//**3**”之后添加適當(dāng)?shù)恼Z句。(4)完畢類A2的成員函數(shù)show的定義,該函數(shù)調(diào)用基類成員函數(shù),輸出基類數(shù)據(jù)成員a和b及類A2自身的數(shù)據(jù)成員c的值,上述三個值在輸出時以空格隔開。請在注釋“//**4**”之后添加適當(dāng)?shù)恼Z句。注意:除在指定位置添加語句之外,請不要改動程序中的其他內(nèi)容。程序輸出結(jié)果如卜.:962源程序文獻kt15_3.cpp清單如下:#inciude<iostream.h>classA{inta;publie://**i**intgcta(){returna:}};classA1:publicA{intb;public://**2木*intgetb(){returnb;)};cIassA2:publicAl{intc;public://**3**voidshow(){〃**4**}};voidinain(){A2a(2,6,9);cout?a.geta()<<end1;cout?a.getb()?endl:;a.show();}【參考答案】(l)A(intx){a=x;}

溫馨提示

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

評論

0/150

提交評論