面向?qū)ο蟪绦蛟O(shè)計(jì)知識(shí)題_第1頁(yè)
面向?qū)ο蟪绦蛟O(shè)計(jì)知識(shí)題_第2頁(yè)
面向?qū)ο蟪绦蛟O(shè)計(jì)知識(shí)題_第3頁(yè)
面向?qū)ο蟪绦蛟O(shè)計(jì)知識(shí)題_第4頁(yè)
面向?qū)ο蟪绦蛟O(shè)計(jì)知識(shí)題_第5頁(yè)
已閱讀5頁(yè),還剩61頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

?面向?qū)ο蟪绦蛟O(shè)計(jì)中的數(shù)據(jù)隱藏指的是參考答案為:DA?輸入數(shù)據(jù)必須輸入保密口令B.數(shù)據(jù)經(jīng)過(guò)加密處理 C.對(duì)象內(nèi)部數(shù)據(jù)結(jié)構(gòu)上建有防火墻D?對(duì)象內(nèi)部數(shù)據(jù)結(jié)構(gòu)的不可訪問(wèn)性[解析]輸入數(shù)據(jù)必須輸入保密口令和數(shù)據(jù)經(jīng)過(guò)加密處理都不是面向?qū)ο蟪绦蛟O(shè)計(jì)的特征;對(duì)象內(nèi)部數(shù)據(jù)結(jié)構(gòu)上也不可能建有防火墻,所以它們都不是面向?qū)ο蟪绦蛟O(shè)計(jì)中所指的數(shù)據(jù)隱藏。面向?qū)ο蟪绦蛟O(shè)計(jì)系統(tǒng)中的封裝單位是對(duì)象,對(duì)象之間只能通過(guò)接口進(jìn)行信息交流,外部不能對(duì)對(duì)象中的數(shù)據(jù)隨意地進(jìn)行訪問(wèn),這就造成了對(duì)象內(nèi)部數(shù)據(jù)結(jié)構(gòu)的不可訪問(wèn)性,也使得數(shù)據(jù)被隱藏在對(duì)象中。這就是面向?qū)ο蟪绦蛟O(shè)計(jì)中的數(shù)據(jù)隱藏所指。.下列各項(xiàng)中符合函數(shù)重載必須滿足的條件的是參考答案為:DA.必須有不同的參數(shù)個(gè)數(shù) B?對(duì)應(yīng)的參數(shù)類型必須不相同 C.A和B必須同時(shí)滿足 D.A和B只要滿足一個(gè)即可[解析]我們知道,在同一個(gè)作用域中,要實(shí)現(xiàn)函數(shù)重載必須滿足的條件的是:①有不同的參數(shù)個(gè)數(shù)或者②對(duì)應(yīng)的參數(shù)有不相同的數(shù)據(jù)類型即①和②中只要有一個(gè)滿足就可以了。當(dāng)然兩者都滿足更好,但這不是必須的。3?下列帶缺省值參數(shù)的函數(shù)說(shuō)明中,正確的說(shuō)明是 參考答案為:AA.intFun(intx,inty=2,intz=3);B.intFun(intx=1,inty,intz=3);C.intFun(intx,inty=2,intz);D.intFun(intx=1,inty,intz=3);[解析]在帶缺省值參數(shù)的函數(shù)說(shuō)明中,正確的說(shuō)明應(yīng)該是無(wú)缺省值的參數(shù)依次排列在參數(shù)表的左邊,排完無(wú)缺省值的參數(shù)后,再依次排列帶缺省值的參數(shù)。從所給出的四個(gè)選項(xiàng)來(lái)看,只有"intFun(intx,inty=2,intz=3)"符合這條規(guī)定,其它的都不符合。4?有如下的對(duì)類“CSample"的說(shuō)明,其中()是錯(cuò)誤的。classCSample{classCSample{參考答案為:AA.inta=23;B.CSample();public:C.CSample(intval);D.~CSample();}[解析]在上面對(duì)類“CSample”說(shuō)明中,“CSampleO”和"CSample(intval)”是該類重載的構(gòu)造函數(shù)、"?CSampleO”是該類的析構(gòu)函數(shù),這三個(gè)語(yǔ)句都是正確的。錯(cuò)誤的語(yǔ)句是“inta=23”,因?yàn)樗`反了在類的聲明(不管是引用性聲明,還是定義性聲明)中都不能以賦值表達(dá)式的形式給它的數(shù)據(jù)成員進(jìn)行初始化。5?已知類A中的一個(gè)成員函數(shù)的說(shuō)明如下:voidSet(A&a);1則該函數(shù)的參數(shù)“A&a”的含義是 參考答案為:CA?指向A的指針為aB?將變量a的地址賦給類AC?類A對(duì)象引用a用作函數(shù)的形參D?變量A與a按位與后作函數(shù)參數(shù)[解析]因?yàn)锳是一個(gè)類,所以“A&a”表示a是類A的對(duì)象,但因?yàn)閷?duì)象a的前綴了符號(hào)“&”,則“&a”表示是類A的對(duì)象引用。所以“A&a”的含義是類A對(duì)象引用a用作函數(shù)的形參。6?若類A和類B的定義如下:classA{public:inti,j;voidget();};classB:A{inti,j;protected:intk;public:voidmake();};voidB::make(){k=i*j;}則其中()是非法的表達(dá)式。 參考答案為:DA.voidget();B.intk;C.voidmake();D.k=i*j;[解析]對(duì)于給定的四項(xiàng)中,前三項(xiàng)都是正確的,只有第四項(xiàng)是錯(cuò)誤的。因?yàn)椋怋是類A的私有派生類(缺省訪問(wèn)類型,所以A中的公類型的數(shù)據(jù)成員在類B中成為了私有數(shù)據(jù)成員,但函數(shù)“voidB::make()”既然是類B的成員函數(shù),則既可訪問(wèn)類A中的公有數(shù)據(jù)成員,也能訪問(wèn)類B中的私有數(shù)據(jù)成員,則表達(dá)式“k二i*j;”造成了訪問(wèn)的二義性,即其中的i和j,到底是取自類A呢?還是取自類B呢?7.下面的主程序中,語(yǔ)句()是錯(cuò)誤的。classA{inti;public:virtualvoidfun()=0;A(inta){i=a;}};classB{intj;public:voidfun(){cout<<”B::fun()\n”;}B(intb,intc):A(b){j=c;}};voidmain() 參考答案為:AA.{Aa(5);B.A*pa;C.Bb(7);D.B*pb;}[解析]在類A中,函數(shù)“virtualvoidfun()=0”為純虛函數(shù),因此,類A為抽象類。作為抽象類,它是不能被用來(lái)定義具體對(duì)象的,而語(yǔ)句Aa(5);”恰恰是定義抽象類的對(duì)象的,所以它是錯(cuò)誤的8?拷貝(復(fù)制)構(gòu)造函數(shù)的作用是 參考答案為:CA?進(jìn)行數(shù)據(jù)類型的轉(zhuǎn)換B?用對(duì)象調(diào)用成員函數(shù)C?用對(duì)象初始化對(duì)象D?用一般類型的數(shù)據(jù)初始化對(duì)象[解析]進(jìn)行數(shù)據(jù)類型的轉(zhuǎn)換和用一般類型的數(shù)據(jù)初始化對(duì)象都是一般構(gòu)造函數(shù)的功能。用對(duì)象調(diào)用成員函數(shù)不用構(gòu)造函數(shù),只要用“對(duì)象名.成員函數(shù)名”即可。所以拷貝(復(fù)制)構(gòu)造函數(shù)的作用,只能是用對(duì)象來(lái)初始化對(duì)象。?下列說(shuō)法中,正確的說(shuō)法是 參考答案為:BA?所有的運(yùn)算符都能被重載B?運(yùn)算符被重載時(shí),它們的優(yōu)先級(jí)與結(jié)合性不會(huì)改變C?當(dāng)需要時(shí),我們可以自定義一個(gè)運(yùn)算符來(lái)進(jìn)行重載D?每個(gè)運(yùn)算符都可以被重載成成員函數(shù)和友元函數(shù)[解析]當(dāng)重載運(yùn)算符時(shí),不是所有的運(yùn)算符都能被重載,有幾個(gè)運(yùn)算符是不能被重載的,如三元運(yùn)算符“?:”、‘.'、‘*'、‘::'、‘#'等;也不是每個(gè)運(yùn)算符都可以被重載成成員函數(shù)和友元函數(shù),如運(yùn)算符='('‘[]'和‘一都只能被重載成成員函數(shù);無(wú)論何時(shí),都不能自定義運(yùn)算符來(lái)進(jìn)行重載,也即重載只能對(duì)已有運(yùn)算符進(jìn)行;但是運(yùn)算符被重載時(shí),它們的優(yōu)先級(jí)與結(jié)合性不會(huì)改變。?下面對(duì)結(jié)構(gòu)或類中成員的訪問(wèn)中,不正確的訪問(wèn)是 參考答案為:AA.*pointer.salary;(其中pointer為指向類對(duì)象的指針)B.pointer->salary;C.x=worker.salary;(其中worker為具有類類型的對(duì)象)D.Location&rA=A1;intx=rA.GetX();(Location為已定義的類,A1為對(duì)象)[解析]因pointer為指向類對(duì)象的指針,所以“pointer->salary”是正確的訪問(wèn)數(shù)據(jù)成員的形式;因worker為具有類類型的對(duì)象,所以Worker.salary”也是正確的訪問(wèn)數(shù)據(jù)成員的形式;因Location為已定義的類,A1為對(duì)象,所以“Location&rA=A1;intx=rAGetX();"表示以對(duì)象A1初始化對(duì)象引用rA然后由對(duì)象引用rA調(diào)用成員函數(shù)GetX()給變量x賦值,這樣的訪問(wèn)成員函數(shù)的形式也是正確的;“*pointer.salary;”中,因?yàn)檫\(yùn)算符‘?’的優(yōu)先級(jí)高于運(yùn)算符‘*'的優(yōu)先級(jí),所以相當(dāng)于“*(pointer.salary);”,那正確的形式應(yīng)該是"*(pointer—salary);"。故“*pointer.salary”是不正確的訪問(wèn)。. C++對(duì)C語(yǔ)言作了很多改進(jìn),即從面向過(guò)程變成為面向?qū)ο蟮闹饕蚴?)DA.增加了一些新的運(yùn)算符B.允許函數(shù)重載,并允許設(shè)置缺省參數(shù)C.規(guī)定函數(shù)說(shuō)明符必須用原型D.引進(jìn)了類和對(duì)象的概念下列符號(hào)不能組成標(biāo)識(shí)符的是(A)A.連接符B.下劃線C.大小寫(xiě)字母D.數(shù)字字符類型修飾符unsigned不能修飾(D)A.charB.intC.longintD.float14?在inta=3,int*p二&a;中,*p的值是(D)A.變量a的地址值B.無(wú)意義C.變量p的地址值D.315.下列關(guān)于指針的操作中,錯(cuò)誤的是(D)A.兩個(gè)同類型的指針可以進(jìn)行比較運(yùn)算B.可以用一個(gè)空指針賦給某個(gè)指針C.一個(gè)指針可以加上兩個(gè)整數(shù)之差D.兩個(gè)同類型的指針可以相加二,填空題不寫(xiě)解答過(guò)程,將正確的答案寫(xiě)在每小題的空格內(nèi)。錯(cuò)填或不填均無(wú)分。1.面向?qū)ο蟪绦蛟O(shè)計(jì)中的多態(tài)性包括靜態(tài)多態(tài)性和動(dòng)態(tài)多態(tài)性,前者由 機(jī)制支持,而后者則由 機(jī)制支持。答:函數(shù)重載、虛函數(shù)[解析]靜態(tài)多態(tài)性又稱編譯時(shí)多態(tài)性,調(diào)用何函數(shù)應(yīng)該在編譯之前就知道了,所以必須由函數(shù)重載機(jī)制來(lái)支持。動(dòng)態(tài)多態(tài)性又稱運(yùn)行時(shí)多態(tài)性,調(diào)用何函數(shù)只有在運(yùn)行時(shí)才知道,所以由虛函數(shù)(與指針或引用)機(jī)制來(lái)支持。2.由charconst*str二”stucture”;所以定義的指針?lè)Q為 ,關(guān)鍵字const所修飾的是 。答:指向常量的指針、指針?biāo)傅淖址劢馕觯莞鶕?jù)由‘*'在修飾符“const"中位置的不同,它所修飾的對(duì)象也不同,“const”表示所修飾的是指針?biāo)傅某A?,該指針?lè)Q為指向常量的指針;“*const”表示所修飾的是指針本身,該指針?lè)Q為常指針;“*const*”則表示所修飾的是指針本身和指針?biāo)赋A?,該指針?lè)Q為指向常量的常指針。引入虛基類的目的是為了解決多重繼承中的 和 問(wèn)題。答:二義性、多占用空間[解析]在允許多重繼承時(shí)可能出現(xiàn)兩個(gè)問(wèn)題,第一個(gè)是公有派生類中的成員通過(guò)不同基類調(diào)用它們上一級(jí)公共基類的同一成員,這就產(chǎn)生了調(diào)用的二義性;每一個(gè)基類都為它們的上一級(jí)公共基類存有備份,這就引起了公共基類的重復(fù)存儲(chǔ),也就多占了存儲(chǔ)空間。引入虛基類的目的是為了解決多重繼承中的這兩個(gè)問(wèn)題。構(gòu)造函數(shù)與析構(gòu)函數(shù)所調(diào)用的虛函數(shù)是 的函數(shù),因此調(diào)用時(shí)實(shí)現(xiàn)的是 聯(lián)編。答:所在類、靜態(tài)[解析]在生成派生類的對(duì)象時(shí),先調(diào)用基類的構(gòu)造函數(shù)生成基類對(duì)象,再調(diào)用派生類的構(gòu)造函數(shù)來(lái)生成派生類對(duì)象。所以當(dāng)在構(gòu)造函數(shù)中調(diào)用虛函數(shù)時(shí),當(dāng)調(diào)用基類的構(gòu)造函數(shù)時(shí),此時(shí)派生類還未生成,所以它只能調(diào)用自己的虛函數(shù);調(diào)用派生類構(gòu)造函數(shù)時(shí),它也只能調(diào)用自己的虛函數(shù),因?yàn)樘摵瘮?shù)的調(diào)用是不能由派生類調(diào)用基類的。在析構(gòu)派生類對(duì)象是時(shí),先調(diào)用派生類的析構(gòu)函數(shù)析構(gòu)掉派生類對(duì)象,再調(diào)用基類的析構(gòu)函數(shù)來(lái)析夠掉基類的對(duì)象。所以當(dāng)在析夠構(gòu)函數(shù)中調(diào)用虛函數(shù)時(shí),派生類的析構(gòu)函數(shù)調(diào)用的是它自己的虛函數(shù)(原因同構(gòu)造函數(shù)),基類的析構(gòu)函數(shù)調(diào)用的也是它自己的虛函數(shù),因?yàn)榇藭r(shí)派生類對(duì)象以已被析構(gòu)掉了。由上可見(jiàn),當(dāng)構(gòu)造函數(shù)與析夠函數(shù)調(diào)用虛函數(shù)時(shí),它們調(diào)用的都是自己類的函數(shù),因此調(diào)用時(shí)實(shí)現(xiàn)的是靜態(tài)聯(lián)編。7?說(shuō)明一個(gè)const成員函數(shù)(又稱常量成員函數(shù))的方法是,將const寫(xiě)在 之間,而且它修飾的是 。答:函數(shù)頭與函數(shù)體、this指針[解析]為了說(shuō)明一個(gè)常量成員函數(shù)的方法是,將const寫(xiě)在函數(shù)頭的右圓括號(hào)‘)與函數(shù)體的左花括號(hào)‘{'之間,而且它修飾的是對(duì)象所屬的this指針。表示該函數(shù)不能修改它所在對(duì)象中的數(shù)據(jù)成員的值。20.對(duì)某個(gè)運(yùn)算符的重載,實(shí)際上是用關(guān)鍵字 與該運(yùn)算符組成一個(gè)運(yùn)算符函數(shù),而且該運(yùn)算符函數(shù)的返回類型不能是 的。答:operater、void[解析]對(duì)某個(gè)運(yùn)算符的重載實(shí)際上是用關(guān)鍵字operater與該運(yùn)算符組成一個(gè)運(yùn)算符函數(shù),而且該運(yùn)算符函數(shù)的返回類型不能是無(wú)類型的,即不能是void的。三改錯(cuò)題classbase{constintn;public:base(){cout<<”Initializingdefault\n”;}base(intm){cout<<”Initializing\n”;n=m;}~base(){cout<<”Destroying\n”;}};voidmain(){basex(1);basey=x;}答(1)n二m;const數(shù)據(jù)成員不以該形式賦值(2)錯(cuò)誤處basey=x;,以對(duì)象初始化對(duì)象[解析](1)作為const數(shù)據(jù)成員n不能用賦值表達(dá)式的形式為其賦初值,必須在定義構(gòu)造函數(shù)時(shí)在函數(shù)頭中以"base(intm):n(m)"形式來(lái)初始化。(2)basey=x;語(yǔ)句中‘二’不是賦值的意思,而是初始化的意思。即在定義類base的對(duì)象y時(shí),以對(duì)象x給它初始化,相當(dāng)于basey(x);。但是以對(duì)象初始化對(duì)象時(shí),必須調(diào)用拷貝構(gòu)造函數(shù)才行。因程序中沒(méi)給出拷貝構(gòu)造函數(shù),也不能調(diào)用系統(tǒng)的缺省拷貝構(gòu)造函數(shù),因用戶給出了構(gòu)造函數(shù)后,再也不能調(diào)用系統(tǒng)提供的任何缺省構(gòu)造函數(shù)。所以,basey=x;是錯(cuò)誤的。classA{intx;public:A(inta){x=a;fun();}virtualvoidfun()=0;};classB:publicA{public:B(intb):A(b){}voidfun(){}};voidmain(){Aaa(5);Bbb(8);}答:1)Aaa(5);抽象類不能定義對(duì)象[解析](1)在構(gòu)造函數(shù)“A(inta)”調(diào)用了純虛函數(shù)“fun()”,因構(gòu)造函數(shù)調(diào)用虛函數(shù)是靜態(tài)聯(lián)編,即調(diào)用的是它自己類的虛函數(shù)。在此調(diào)用的是純虛函數(shù),它只被說(shuō)明,而未定義,所以不可能被執(zhí)行,因此出錯(cuò)。(2)抽象類相當(dāng)于是對(duì)類的引用性聲明,所以它只能定義該類的指針和引用,而不能定義它的對(duì)象。在此,A為抽象類,而“Aaa(5)”卻定義了A的對(duì)象,因此是錯(cuò)誤的。classAA{intaa;AA(intxx){aa=xx;}public:intget(){returnaa;}~AA(){cout<<”Destroying”<<AA<<endl;};main(){AAelem(5);cout<<elem.get()<<endl;}答(1)AA(intxx)的訪問(wèn)屬性錯(cuò)、應(yīng)具有公有屬性[解析](1)構(gòu)造函數(shù)雖是由系統(tǒng)自動(dòng)調(diào)用來(lái)生成對(duì)象的,但一般都是在類外調(diào)用,所以它的訪問(wèn)屬性必須是公有的。程序中構(gòu)造函數(shù)的訪問(wèn)屬性是私有的(缺省值),運(yùn)行中必定出錯(cuò)。四.完成程序題(本大題共5小題,每小題4分,共20分)根據(jù)題目要求,完成程序填空。1.仔細(xì)閱讀下列求兩個(gè)點(diǎn)之間距離的程序,根據(jù)程序的輸出結(jié)果在劃線處填入正確語(yǔ)句。classpoint{floatx,y;public:point(floata,floatb){x=a;y=b;}floatdistance(point&p){floatdx= ① ;floatdy= ② ;return(float)sqrt(dx*dx+dy*dy);}};voidmain(){pointp1(2,3),p2(32,43);cout<<p1.___③___<<endl;}答:①p.x-xp.y-ydistance(p2)[解析]由于求兩點(diǎn)之間距離的函數(shù)"distanee”為成員函數(shù),所以由該函數(shù)的this指針?biāo)笇?duì)象可用作起點(diǎn)(參數(shù)之一),另一個(gè)用作終點(diǎn)的參數(shù),必須在函數(shù)的參數(shù)表中顯式地給出。dx和dy分別計(jì)算兩個(gè)結(jié)點(diǎn)間x和y坐標(biāo)間的距離因此應(yīng)該為:dx=p.x-x和dy=p.y-y。對(duì)它們求平方相加后開(kāi)方即可,得到兩點(diǎn)間的距離:(float)srrt(da*da+dy*dy)。在主程序中求pl和p2兩個(gè)結(jié)點(diǎn)之間的距離,由于由pl調(diào)用距離函數(shù),所以由p2作為它的參數(shù),即distance(p2)。2.兩個(gè)復(fù)數(shù)只有當(dāng)它們的實(shí)部和虛部分別相等時(shí),才被認(rèn)為它們相等。在空格處填入合適的內(nèi)容,以完成下面的程序,使其重載運(yùn)算符"==”,用以比較兩個(gè)復(fù)數(shù)的相等。請(qǐng)?jiān)谥骱瘮?shù)中輸出比較的結(jié)果。#includeclasscomplex{doublereal,imag;public:complex(doubler,doublei){real=r;imag=i;}booloperator==(complex&);};intcomplex::operator==(complex&com){return( ① )}voidmain(){complexc1(12.3,32.5),c2(21.7,18.6);if( ② )returncout<<”true\n”;elsereturncout<<”false\n”;}答:①(real二二com.real)&&(imag二二com.imag)②c1==c2或c1.operator==(c2)[解析]若兩個(gè)復(fù)數(shù)的相等,則必有它們的實(shí)數(shù)部分和虛數(shù)部分都相等,所以運(yùn)算符重載函數(shù)中返回“(real==com.real)&&(imag==com.imag)”,只有real二二com.real與imag==com.imag都為真時(shí),該函數(shù)的返回值才為真。在主程序中,為了比較兩個(gè)復(fù)數(shù)c1和c2,可以隱式地寫(xiě)成“c1==c2”,也可顯式寫(xiě)成“c1.operator==(c2)"。3?下列程序中聲明了兩個(gè)類AA和BB,其中函數(shù)“print”是類AA的成員函數(shù),但是類BB的友元函數(shù)。請(qǐng)?jiān)冖?、②和③處各填入正確的內(nèi)容,使程序能正常運(yùn)行。#include ① ;classAA{intt;public:AA(intx){t=x;}voidprint(BB&b);};classBB{ints;public:BB(inty){s=y;}friendvoid___②___print(BB&);};void ③ {cout<<”AA:”<<T<<”;BB:”<<W.S<<endl;}voidmain(){AAm(6);BBn(8);m.print(n);

}答:①classBB;②AA::③AA::print(BB&w)[解析]由于AA類的成員函數(shù)“print”是類BB的友元函數(shù),因此它必須有一個(gè)BB類的引用作為參數(shù),以便有引用BB類數(shù)據(jù)成員的接口。但此時(shí)BB類還未定義,為解決此矛盾,在①處先對(duì)BB類作引用性聲明“classBB;”,告訴系統(tǒng)BB類在后面定義。因?yàn)楹瘮?shù)“print”是類AA的成員函數(shù),在類外定義必須加上類名和作用域分辨符,即在②處加上“AA::"。在BB類外定義“print”時(shí),因是友元,所以沒(méi)有加上“BB::"的必要,但“AA::"還是必須加的,所以在③處填“AA::print(BB&w)"。五.程序分析題1.請(qǐng)分析以下的程序,給出該程序的正確執(zhí)行結(jié)果。#include<iostream>usingnamespacestd;intadd(intx,inty){returnx+y;}voidmain()intm=2,n=3;cout<<"1:"<<add(m++,m+n)<<endl;m=2,n=3;cout<<"2:"<<add(++m,m+n)<<endl;m=2,n=3;cout<<"3:"<<add(m+n,m++)<<endl;m=2,n=3;cout<<"4:"<<add(m+n,++m)<<endl;}答:1:72:83:84:9[解析]在說(shuō)明答案之前,要說(shuō)明兩個(gè)問(wèn)題:1)C++語(yǔ)言中,函數(shù)參數(shù)是壓在棧里的,因壓棧是從前往后進(jìn)行的,所以出棧就是從后向前進(jìn)行的,也即先取最后的參數(shù),然后再向前逐個(gè)取用;2)對(duì)于單加運(yùn)算,m++是先執(zhí)行后加1,++m是加1后再執(zhí)行。由此,因m=2,n=3;,所以:1:(m++)+(m+n)=2+(2+3)=7(m++后執(zhí)行,且后加1,所以m=2—直未變):(++m)+(m+n)=3+(2+3)=8(++m后執(zhí)行,但先加1,執(zhí)行++m時(shí),m=3了):(m+n)+(m++)=(3+3)+2=8(先執(zhí)行m++,后加1,執(zhí)行m+n時(shí),m=3了)4:(m+n)+(++m)=(3+3)+3=9;(先執(zhí)行++m,且先加1,故一開(kāi)始就有m=3)3.請(qǐng)分析下面的程序并給出該程序的執(zhí)行結(jié)果。#includeclassAA{inta;public:AA(){cout<<”InitualizingAA!\n”;}~AA(){cout<<”DestroyingAA!\n”;};classBB{intb;AAp;public:BB(){cout<<”InitualizingBB!\n”;}~BB(){cout<<”DestroyingBB!\n”;};voidmain(){BBX;cout<<”Endingmain!\n”;}答:InitualizingAA!InitualizingBB!Endingmain!DestroyingBB!DestroyingAA![解析]雖然在主程序中只定義了一個(gè)類BB的對(duì)象,但在類BB中聲明了類AA的對(duì)象作為它的數(shù)據(jù)成員。當(dāng)一個(gè)類中含有對(duì)象作為數(shù)據(jù)成員時(shí),在生成對(duì)象時(shí),先調(diào)用成員對(duì)象的構(gòu)造函數(shù),再調(diào)用類自己的構(gòu)造函數(shù),所以輸出了“nitualizingAA!"(成員對(duì)象構(gòu)造函數(shù)的輸出)和"InitualizingBB!"(類自己構(gòu)造函數(shù)的輸出)。對(duì)象生成后,執(zhí)行下一句輸出語(yǔ)句,則輸出"Endingmain!"。此時(shí)程序結(jié)束,調(diào)用析構(gòu)函數(shù)來(lái)析構(gòu)掉對(duì)象,先調(diào)用類自身的析構(gòu)函數(shù),其輸出為“DestroyingBB!”,再調(diào)用成員對(duì)象的析構(gòu)函數(shù),其輸出為“DestroyingAA!"。4.寫(xiě)出下列程序的運(yùn)行結(jié)果。#includeclassAA{public:staticintn;AA(){n++;}};intAA::n=0;main(){cout<<"AA::n="<<AA::n<<endl;AAd1;cout<<<d1.n<<endl;AAd2;cout<<<d2.n<<endl;AAd3,d4;cout<<<d1.n<<endl;cout<<<d2.n<<endl;}答:AA::n=0d1.n=1d2.n=2d1.n=4d2.n=4[解析]由于數(shù)據(jù)成員n的訪問(wèn)屬性是公有的,所以在類外可訪問(wèn)它;又它是靜態(tài)變量,所以具有全局性。在構(gòu)造函數(shù)中,執(zhí)行的是n++操作,即每次調(diào)用構(gòu)造函數(shù)n就加1當(dāng)程序開(kāi)始時(shí),因未定義對(duì)象,所以n的值為初始化時(shí)的值,則輸出為“AA::n=0”當(dāng)定義了對(duì)象d1后,由于調(diào)用了構(gòu)造函數(shù),則該對(duì)象中n=1,故輸出“dl.n=1”同理,對(duì)象d2輸出“d2.n=2”由于接下來(lái)生成了兩個(gè)對(duì)象d3和d4,調(diào)用兩次構(gòu)造函數(shù),n兩次加1,此時(shí)n=4,所以下面兩條語(yǔ)句的輸出為“d1.n=4"和“d2.n=4”5.寫(xiě)出下列程序的輸出結(jié)果。#includeclassAA{public:AA{}{cout<<”ConstructorofAA.\n”;fun();}virtualvoidfun(){cout<<”AA::fun()called.\n”;}};classBB:publicAA{public:BB(){cout<<”ConstructorofBB.\n”;fun();}voidfun(){cout<<”BB::fun()called.\n”;}};voidmain(){BBd;}答:ConstructorofAA.AA::fun()called.ConstructorofBB.BB::fun()called.[解析]雖然函數(shù)fun()說(shuō)明為虛函數(shù),但當(dāng)在構(gòu)造函數(shù)中被調(diào)用時(shí),呈現(xiàn)的是靜態(tài)聯(lián)編,即基類和派生類都調(diào)用各自的函數(shù)fun()。所以,當(dāng)生成對(duì)象d時(shí),先調(diào)用基類的構(gòu)造函數(shù),在構(gòu)造函數(shù)中又調(diào)用自己的函數(shù)"fun()”,所以輸出為"ConstructorofAA.和"AA::fun()called."。同理調(diào)用派生類的構(gòu)造函數(shù)時(shí),生成的輸出為"ConstructorofBB."和"BB::fun()called.”。6.請(qǐng)給出下面的程序的輸出結(jié)果。#includetemplateclassTvoidsort(T*a,intn){Tnum;for(inti=0;i<n-1;i++){for(intj=i;j<n-1;j++)if(a[j]>a[j+1]){num=a[j];a[j]=a[j+1];a[j+1]=num;}}for(i=0;i<n;i++)cout<<a[i]<<endl;}voidmain(){intiver[5]={12,45,9,23,37};doubledver[5]={22.3,56.7,43.5,13.8,8.6};sort(iver,5);sort(dver,.5);}答:9122337458.613.822.343.556.7[解析]這是使用模板的例子。函數(shù)sort是一個(gè)遞增的排序函數(shù),T是個(gè)模板。當(dāng)數(shù)組是整型數(shù)據(jù)類型時(shí),它為整型數(shù)組排序;當(dāng)數(shù)組為雙精度數(shù)據(jù)類型時(shí),它為雙精度數(shù)組排序。所以輸出如上結(jié)果。7.分析以下程序的執(zhí)行結(jié)果#include<iostream.h>voidmain(){inta;int&b=a;//變量引用b=10;cout<<"a="<<a<<endl;}解:本題說(shuō)明變量引用的方法。b是a的引用,它們分配相同的空間,b的值即為a的值。所以輸出為a=10。8.分析以下程序的執(zhí)行結(jié)果#include<iostream.h>classSample{intx;public:Sample(){};Sample(inta){x=a;}Sample(Sample&a){x=a.x+1;}voiddisp(){cout<<"x="<<x<<endl;}};voidmain(){Samples1(2),s2(s1);s2.disp();}解:本題說(shuō)明類拷貝構(gòu)造函數(shù)的使用方法。Sample類的Sample(Sample&a胸造函數(shù)是一個(gè)拷貝構(gòu)造函數(shù),將a對(duì)象的x值賦給當(dāng)前對(duì)象的x后加1。所以輸出為:x=3。9.分析以下程序的執(zhí)行結(jié)果#include<iostream.h>classSample{public:intx;inty;voiddisp(){cout<<"x="<<x<<",y="<<y<<endl;}};voidmain(){intSample::*pc;Samples,*p=&s;pc=&Sample::x;p->*pc=10;pc=&Sample::y;p->*pc=20;p->disp();}解:本題說(shuō)明了類數(shù)據(jù)成員指針的使用方法。這里通過(guò)指向?qū)ο蟮闹羔榿?lái)給類數(shù)據(jù)成員賦值,其原理與上題相似。輸出為:x=10,y=2010.分析以下程序的執(zhí)行結(jié)果#include<iostream.h>classSample{intx;inty;public:Sample(inta,intb){x=a;y=b;}intgetx(){returnx;}intgety(){returny;}};voidmaino亠int(samp-e::*fp)ofpHp?samp-e::ger><samp-es(2、7)jintvAs.*fp)ofpMstsamp-eugewinttAs.*fp)onoc7A=<n=AA<AA=^n=AA7牀理別因磐sffi尊。!-++-g>-llfpHsannp_agerx卵fpffi回B別因潯gerxpintvAs'fpofiw曲?3『intv.gerx()NHXH23s>-llfpHsamp-agery2訕、fpffi回B別因磐gerye.nttAs.*fp)()fiw^?s『inttHs.ge1:y()、tHXH7。耳左B圧X-VH2JH7一一?①聖-Hffi羽嘗Ml齋#inc-ude〈iostrealTLhvc-asssamp-e亠intXintspub-icSample(inta,intb){x=a;y=b;}intgetx(){returnx;}intgety(){returny;}};voidmain(){int(Sample::*fp)();fp=&Sample::getx;Samples(2,7),*p=&s;intv=(p->*fp)();fp=&Sample::gety;intt=(p->*fp)();cout<<"v="<<v<<",t="<<t<<endl;}解:本題說(shuō)明了類成員函數(shù)指針的使用方法。這里通過(guò)指向?qū)ο蟮闹羔榿?lái)調(diào)用指向類成員函數(shù)的指針,其原理與上題相似。輸出仍為:v=2,t=712.分析以下程序的執(zhí)行結(jié)果#include<iostream.h>classbase{public:base(){cout<<"constructingbaseclass"<<endl;}~base(){cout<<"destructingbaseclass"<<endl;}};classsubs:publicbase{public:subs(){cout<<"constructingsubclass"<<endl;}~subs(){cout<<"destructingsubclass"<<endl;}};voidmain(){subss;}解:本題說(shuō)明單繼承情況下構(gòu)造函數(shù)和析構(gòu)函數(shù)的調(diào)用順序。這里base為基類,subs為派生類。所以輸出為:constructingbaseclassconstructingsubclassdestrcutingbaseclass注意:在單繼承情況下,首先調(diào)用基類的構(gòu)造函數(shù),隨后調(diào)用派生類的構(gòu)造函數(shù),析構(gòu)函數(shù)的調(diào)用順序則正好相反。13.分析以下程序的執(zhí)行結(jié)果:#include<iostream.h>classbase{intn;public:base(inta){cout<<"constructingbaseclass"<<endl;n=a;cout<<"n="<<n<<endl;}~base(){cout<<"destructingbaseclass"<<endl;}};classsubs:publicbase{basebobj;intm;public:subs(inta,intb,intc):base(a),bobj(c){cout<<"constructingsubcass"<<endl;m=b;cout<<"m="<<m<<endl;}~subs(){cout<<"destructingsubclass"<<endl;}};voidmain(){subss(1,2,3);這里base這里base解:本題說(shuō)明派生類中含有對(duì)象成員情況下構(gòu)造函數(shù)和析構(gòu)函數(shù)的調(diào)用順序?yàn)榛?subs為派生類,subs類的構(gòu)造函數(shù)中含有對(duì)象成員。所以輸出為:constrcutingbaseclassn=1constructingbaseclassn=3constructingsubclassm=2destructingbaseclassdestructingbaseclass注意:當(dāng)派生類中含有對(duì)象成員時(shí),構(gòu)造函數(shù)的調(diào)用順序如下:基類的構(gòu)造函數(shù)2)對(duì)象成員的構(gòu)造函數(shù)3)派生類的構(gòu)造函數(shù)析構(gòu)函數(shù)的調(diào)用順序與之相反14.分析以下程序的執(zhí)行結(jié)果#include<iostream.h>classA{public:intn;};classB:publicA{};classC:publicA{};classD:publicB,publicC{intgetn(){returnB::n;}};voidmain()**Dd「dBmulojdcm"2ocoutAAd?B::nAA=、=〈Ad?c::nAAendr)K-D牀砌歹牀君牀為倂吉刮牀君牀X驥砌歹牀為倂sMlm瞅血皿C1JSU料。耳左誇『誇Bd、dBmdrrdcm砌因->吻£1]吉磐肺理別CV}亠izjw呂聚瀘耳左B圧甘-10、2015?①聖-Hffi羽嘗Ml齋#inc-ude〈iostrealTLhvc-assA亠pub-icintpc-assBMrtua-pub-icc-assGvirtua-pub-icc-assD-bub-icB、pub-icC亠intgetnoKeturnB::nAvoidmain(){Dd;d.B::n=10;d.C::n=20;cout<<d.B::n<<","<<d.C::n<<endl;}解:D類是從類和類派生的而類和類又都是從類派生但這是虛繼承關(guān)系即是虛基類因此和共用—個(gè)的副本所以對(duì)于對(duì)象d,d.B::n與d.C::n是一個(gè)成員。所以輸出為:20,2016.分析以下程序執(zhí)行結(jié)果#include<iostream.h>intadd(intx,inty){returnx+y;}doubleadd(doublex,doubley){returnx+y;voidmain(){inta=4,b=6;doublec=2.6,d=7.4;cout<<add(a,b)<<","<<add(c,d)<<endl;}解:本題說(shuō)明函數(shù)重載的使用方法,這里有兩個(gè)add()函數(shù),一個(gè)add()函數(shù)的參數(shù)與返回值為int型,另一個(gè)的參數(shù)與返回值為double型,它們是根據(jù)參數(shù)類型自動(dòng)區(qū)分的。所以輸出為:10,1017.分析以下程序的執(zhí)行結(jié)果#include<iostream.h>classSample{inti;doubled;public:voidsetdata(intn){i=n;}voidsetdata(doublex){d=x;}voiddisp(){cout<<"i="<<i<<",d="<<d<<endl;voidmainosamp-e9s.setdata(10)js.setdata(15.6)「s.dispo岡?。二"10、d"15.622?①聖-Hffi羽嘗Ml齋#inc-ude〈iostrealTLhvc-asssamp-e亠intppub-icsamp-e(ssamp-e(inti)sl!.Asamp-ep?operatorAsamp-ervoiddisp(HcoutAA=nH=AAn〈Aend-AserdaoroB別因磐血aT、Sample&Sample::operator=(Samples){Sample::n=s.n;return*this;}voidmain(){Samples1(10),s2;s2=s1;s2.disp();}解:本題說(shuō)明重載運(yùn)算符(=)的使用方法。operator二成員函數(shù)實(shí)現(xiàn)兩個(gè)對(duì)象的賦值。所以輸出為:n=10六.程序設(shè)計(jì)題1?設(shè)計(jì)一個(gè)三角形類Triangle,包含三角形三條邊長(zhǎng)的私有數(shù)據(jù)成員,另有一個(gè)重載運(yùn)算符“+”,以實(shí)現(xiàn)求兩個(gè)三角形對(duì)象的面積之和。解:在Triangle類中設(shè)計(jì)一個(gè)友元函數(shù)operator+(Trianglet1,Triangle⑵,它重載運(yùn)算符"+",返回t1和t2兩個(gè)三角形的面積之和。本題程序如下:#include<iostream.h>#include<math.h>classTriangle{intx,y,z;doublearea;public:Triangle(inti,intj,intk){doubles;x=i;y=j;z=k;s=(x+y+z)/2.0;area=sqrt(s*(s-x)*(s-y)*(s-z));}voiddisparea(){cout<<"Area="<<area<<endl;}frienddoubleoperator+(Trianglet1,Trianglet2){returnt1.area+t2.area;}};voidmain(){Trianglet1(3,4,5),t2(4,5,6);doubles;cout<<"t1:";t1.disparea();cout<<"t2:";t2.disparea();s=t1+t2;cout<<"總面積二"<<s<<endl;}本程序執(zhí)行結(jié)果如下:t1:Area=6t2:Area=9.92157總面積=15.92162.重載運(yùn)算符“+”友元函數(shù)只能返回兩個(gè)三角形的面積之和,不能計(jì)算三個(gè)三角形的面積之和,改進(jìn)一下,使之能計(jì)算任意多個(gè)三角形的面積之和。解:重載運(yùn)算符為什么不能計(jì)算3個(gè)三角形的面積之和呢?對(duì)于式子:s=t1+t2+t3,先計(jì)算t1+t2,返回一個(gè)double數(shù)然后再進(jìn)行該double數(shù)+t3的計(jì)算,顯然沒(méi)有這樣的重載運(yùn)算符“+”友元函數(shù),只需要添加這樣重載運(yùn)算符“+”友元函數(shù)即可。本題程序如下:#include<iostream.h>#include<math.h>classTriangleintx,y,z;doublearea;public:Triangle(inti,intj,intk){doubles;x=i;y=j;z=k;s=(x+y+z)/2.0;area=sqrt(s*(s-x)*(s-y)*(s-z));}voiddisparea(){cout<<"Area="<<area<<endl;}frienddoubleoperator+(Trianglet1,Trianglet2){returnt1.area+t2.area;}frienddoubleoperator+(doubled,Trianglet){returnd+t.area;}};voidmain(){Trianglet1(3,4,5),t2(4,5,6),t3(5,6,7),t4(6,7,8);doubles;cout<<"t1:";t1.disparea();cout<<"t2:";t2.disparea();cout<<"t3:";t3.disparea();cout<<"t4:";t4.disparea();s=t1+t2+t3+t4;cout<<"總面積二"<<s<<endl;}本程序的執(zhí)行結(jié)果如下:t1:Area=6t2:Area=9.92157t3:Area=14.6969t4:Area=

溫馨提示

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

評(píng)論

0/150

提交評(píng)論