版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第八章多態(tài)1.單選題.下列關(guān)于運(yùn)算符重載的描述中,(D(A)可以改變參與運(yùn)算的操作數(shù)個(gè)數(shù)(C)可以改變運(yùn)算符原來的結(jié)合性.下列函數(shù)中,不能重載運(yùn)算符的函數(shù)是((A)成員函數(shù)(B)1.單選題.下列關(guān)于運(yùn)算符重載的描述中,(D(A)可以改變參與運(yùn)算的操作數(shù)個(gè)數(shù)(C)可以改變運(yùn)算符原來的結(jié)合性.下列函數(shù)中,不能重載運(yùn)算符的函數(shù)是((A)成員函數(shù)(B)構(gòu)造函數(shù).要求用成員函數(shù)重載的運(yùn)算符是((A)=(B)==.要求用友員函數(shù)重載的運(yùn)算符是((A)=(B)[])是正確的。
(D)
bA)。(C)<=C)。(C)<<可以改變運(yùn)算符原來的優(yōu)先級不能改變原運(yùn)算符的語義)。普通函數(shù)(D)友員函數(shù)(D)++(5).在C++中,要實(shí)現(xiàn)動(dòng)態(tài)聯(lián)編,必須使用(D(D))調(diào)用虛函數(shù)。()(A)類名(B)派生類指針(C)對象名(D)基類指針6).下列函數(shù)中,不能說明為虛函數(shù)的是(C)。(A)私有成員函數(shù)(B)公有成員函數(shù)(C)構(gòu)造函數(shù)(D)(A)私有成員函數(shù)順序和函數(shù)的返回值(7順序和函數(shù)的返回值(A)。相同不同(C)相容相同不同(C)相容(D)部分相同(8).C++中,根據(jù)D)識別類層次中不同類定義的虛函數(shù)版本。(A)(8).C++中,根據(jù)D)識別類層次中不同類定義的虛函數(shù)版本。(A)參數(shù)個(gè)數(shù)(B)參數(shù)類型(C)函數(shù)名(D)this指針類型.虛析構(gòu)函數(shù)的作用是(C)。(A)虛基類必須定義虛析構(gòu)函數(shù)(B)類對象作用域結(jié)束時(shí)釋放資源(C)delete動(dòng)態(tài)對象時(shí)釋放資源(A)虛基類必須定義虛析構(gòu)函數(shù)(B)類對象作用域結(jié)束時(shí)釋放資源(C)delete動(dòng)態(tài)對象時(shí)釋放資源(D)無意義.下面函數(shù)原型中,(.下面函數(shù)原型中,()聲明了fun為純虛函數(shù)。(A)voidfun()=0;(B)virtualvoidfun()=0;(A)voidfun()=0;(B)virtualvoidfun()=0;virtualvoidfun();virtualvoidfun(){virtualvoidfun();virtualvoidfun(){};.若一個(gè)類中含有純虛函數(shù),則該類稱為(C)。(A)基類(B)(A)基類(B)純基類(C)抽象類(D)派生類.假設(shè)Aclass為抽象類,下列正確的說明語句是(B)。(A)Aclassfun(int);(B)Aclass*(A)Aclassfun(int);(B)Aclass*p;(C)intfun(Aclass);(D)AclassObj;2?在C++中,使用類體系依靠什么機(jī)制實(shí)現(xiàn)程序運(yùn)行時(shí)的多態(tài)?解答】在C++中,基類指針可以指向派生類對象,以及基類中擁有虛函數(shù),是支持多態(tài)性的前提。程序通過用同一個(gè)基類指針訪問不同派生類的虛函數(shù)重載版本實(shí)現(xiàn)程序運(yùn)行時(shí)的多態(tài)。C++的虛特性負(fù)責(zé)自動(dòng)地在程序運(yùn)行時(shí)把基類指針的關(guān)聯(lián)類型轉(zhuǎn)換成當(dāng)前指向?qū)ο蟮呐缮愵愋?。另外,抽象類機(jī)制提供了軟件抽象和可擴(kuò)展性的手段,實(shí)現(xiàn)運(yùn)行時(shí)的多態(tài)性。3.如果一個(gè)類的虛函數(shù)被聲明為私有成員函數(shù),會(huì)有語法錯(cuò)誤嗎?當(dāng)它作為基類時(shí),可以在應(yīng)用類體系時(shí)實(shí)現(xiàn)動(dòng)態(tài)聯(lián)編嗎?請你驗(yàn)證一下?!窘獯稹繘]有語法錯(cuò)誤。但在應(yīng)用類體系時(shí)無法實(shí)現(xiàn)動(dòng)態(tài)編聯(lián)和多態(tài)。因?yàn)樗接谐蓡T函數(shù)只在類內(nèi)可見,在類外無法調(diào)用,無法在類外通過基類指針實(shí)現(xiàn)多態(tài)。程序略。4.虛函數(shù)和純虛函數(shù)的區(qū)別是什么?【解答】虛函數(shù)定義時(shí)冠以關(guān)鍵字virtual,本身有實(shí)現(xiàn)代碼,作用是引導(dǎo)基類指針根據(jù)指向?qū)ο笳{(diào)用類體系中不同重載版本函數(shù)。純虛函數(shù)是指在說明時(shí)代碼“為0”的虛函數(shù),即純虛函數(shù)本身并沒有實(shí)現(xiàn)代碼,必須通過它的派生類定義實(shí)現(xiàn)版本。5.閱讀下列程序,寫出運(yùn)行結(jié)果。#include<iostream>usingnamespacestd;classT{public:T(){a=0;b=0;c=0;}T(inti,intj,intk){a=i;b=j;c=k;}voidget(int&i,int&j,int&k){i=a;j=b;k=c;}Toperator*(Tobj);private:inta,b,c;};TT::operator*(Tobj){Ttempobj;tempobj.a=a*obj.a;tempobj.b=b*obj.b;tempobj.c=c*obj.c;returntempobj;}intmain(){Tobj1(1,2,3),obj2(5,5,5),obj3;inta,b,c;obj3=obj1*obj2;obj3.get(a,b,c);cout<<"(obj1*obj2):"<<"a="<<a<<'\t'<<"b="<<b<<'\t'<<"c="<<c<<'\t'<<endl;(obj2*obj3).get(a,b,c);cout<<"(obj2*obj3):"<<"a="<<a<<'\t'<<"b="<<b<<'\t'<<"c="<<c<<'\t'<<endl;}【解答】(obj1*obj2):a=5b=10c=15(obj2*obj3):a=25b=50c=756.閱讀下列程序,寫出運(yùn)行結(jié)果。#include<iostream>usingnamespacestd;classVector{public:Vector(){}Vector(inti,intj){x=i;y=j;}friendVectoroperator+(Vectorv1,Vectorv2){VectortempVector;tempVector.x=v1.x+v2.x;tempVector.y=v1.y+v2.y;returntempVector;}voiddisplay(){cout<<"("<<x<<","<<y<<")"<<endl;}private:intx,y;};intmain(){Vectorv1(1,2),v2(3,4),v3;cout<<"v1=";v1.display();cout<<"v2=";v2.display();v3=v1+v2;cout<<"v3=v1+v2=";v3.display();}【解答】v1=(1,2)v2=(3,4)v3=v1+v2=(4,6)7.閱讀下列程序,寫出運(yùn)行結(jié)果。#include<iostream>usingnamespacestd;classBclass{public:Bclass(inti,intj){x=i;y=j;}virtualintfun(){return0;}protected:intx,y;};classIclass:publicBclass{public:Iclass(inti,intj,intk):Bclass(i,j){z=k;}intfun(){return(x+y+z)/3;}private:intz;};intmain(){Iclassobj(2,4,10);Bclassp1=obj;cout<<p1.fun()<<endl;Bclass&p2=obj;cout<<p2.fun()<<endl;cout<<p2.Bclass::fun()<<endl;Bclass*p3=&obj;cout<<p3->fun()<<endl;}【解答】05058.閱讀下列程序,寫出運(yùn)行結(jié)果。#include<iostream>usingnamespacestd;classBase{public:virtualvoidgetxy(inti,intj=0){x=i;y=j;}virtualvoidfun()=0;protected:intx,y;};classA:publicBase{public:voidfun(){cout<<"x="<<x<<'\t'<<"y=x*x="<<x*x<<endl;}};classB:publicBase{public:voidfun(){cout<<"x="<<x<<'\t'<<"y="<<y<<endl;cout<<"y=x/y="<<x/y<<endl;}};intmain(){Base*pb;Aobj1;Bobj2;pb=&obj1;pb->getxy(10);pb->fun();pb=&obj2;pb->getxy(100,20);pb->fun();}【解答】x=10y=x*x=100x=100y=20y=x/y=59.分別使用成員函數(shù)和友員函數(shù)編寫程序重載運(yùn)算符“+”,使該運(yùn)算符能實(shí)現(xiàn)兩個(gè)字符串的連接?!窘獯稹?1)使用成員函數(shù)#include<iostream>#include<cstring>usingnamespacestd;classs{public:s(){*str='\0';}s(char*pstr){strcpy(str,pstr);}char*gets(){returnstr;}soperator+(sobj);private:charstr[10];};ss::operator+(sobj){strcat(str,obj.str);returnstr;//或return*this}intmain(){sobj1("Visual"),obj2("C++"),obj3;obj3=obj1+obj2;cout<<obj3.gets()<<endl;}(2)使用友員函數(shù)#include<iostream>#include<cstring>usingnamespacestd;classs{public:s(){*str='\0';}s(char*pstr){strcpy(str,pstr);}char*gets(){returnstr;}friendsoperator+(sobj1,sobj2);private:charstr[100];};soperator+(sobj1,sobj2){stempobj;strcat(tempobj.str,obj1.str);strcat(tempobj.str,obj2.str);returntempobj;}intmain(){sobj1("Visual"),obj2("C++"),obj3;obj3=obj1+obj2;cout<<obj3.gets()<<endl;}10.定義一個(gè)整數(shù)計(jì)算類Integer,實(shí)現(xiàn)短整數(shù)*,/基本算術(shù)運(yùn)算。要求可以進(jìn)行數(shù)據(jù)范圍檢査(-32768?32767,或自行設(shè)定),數(shù)據(jù)溢出時(shí)顯示錯(cuò)誤信息并中斷程序運(yùn)行。【解答】#include<iostream>usingnamespacestd;classInteger{private:shorta;public:Integer(shortn=0){a=n;}Integeroperator+(Integer);Integeroperator-(Integer);Integeroperator*(Integer);Integeroperator/(Integer);Integeroperator=(Integer);voiddisplay(){cout<<a<<endl;}};IntegerInteger::operator+(Integerx){Integertemp;if(a+x.a<-32768||a+x.a>32767){cout<<"Dataoverflow!"<<endl;abort();}temp.a=a+x.a;returntemp;}IntegerInteger::operator-(Integerx){Integertemp;if(a-x.a<-32768||a-x.a>32767){cout<<"Dataoverflow!"<<endl;abort();}temp.a=a-x.a;returntemp;}IntegerInteger::operator*(Integerx){Integertemp;overflow!"<<endl;if(a*x.a<-32768||a*x.a>32767){cout<<"Dataabort();}overflow!"<<endl;temp.a=a*x.a;returntemp;}IntegerInteger::operator/(Integerx){Integertemp;if(a/x.a<-32768||a/x.a>32767){cout<<"Dataoverflow!"<<endl;abort();}temp.a=a/x.a;returntemp;}IntegerInteger::operator=(Integerx){a=x.a;return*this;intmain(){IntegerA(90),B(30),C;cout<<"A=";A.display();cout<<"B=";B.display();C=A+B;cout<<"C=A+B=";C.display();C=A-B;cout<<"C=A-B=";C.display();C=A*B;cout<<"C=A*B=";C.display();C=A/B;cout<<"C=A/B=";C.display();}11.使用虛函數(shù)編寫程序求球體和圓柱體的體積及表面積。由于球體和圓柱體都可以看做由圓繼承而來,所以可以把圓類Circle作為基類。在Circle類中定義一個(gè)數(shù)據(jù)成員radius和兩個(gè)虛函數(shù)area和volume。由Circle類派生Sphere類和Column類。在派生類中對虛函數(shù)area和volume重新定義,分別求球體和圓柱體的體積及表面積?!窘獯稹?include<iostream>usingnamespacestd;constdoublePI=3.14159265;classcircle{public:circle(doubler){radius=r;}virtualdoublearea(){return0.0;}virtualdoublevolume(){return0.0;}protected:doubleradius;};classsphere:publiccircle{public:sphere(doubler):circle(r){}doublearea(){return4.0*PI*radius*radius;}doublevolume(){return4.0*PI*radius*radius*radius/3.0;}};classcolumn:publiccircle{public:column(doubler,doubleh):circle(r){height=h;}doublearea(){return2.0*PI*radius*(height+radius);}doublevolume(){returnPI*radius*radius*height;}private:doubleheight;};intmain(){circle*p;spheresobj(2);p=&sobj;cout<<"球體:"<<endl;cout<<"體積="<<p->volume()<<endl;cout<<"表面積="<<p->area()<<endl;columncobj(3,5);p=&cobj;cout<<"圓柱體:"<<endl;cout<<"體積="<<p->volume()<<endl;cout<<"表面積="<<p->area()<<endl;}12.某學(xué)校對教師每月工資的計(jì)算規(guī)定如下:固定工資+課時(shí)補(bǔ)貼。教授的固定工資為5000元,每個(gè)課時(shí)補(bǔ)貼50元。副教授的固定工資為3000元,每個(gè)課時(shí)補(bǔ)貼30元。講師的固定工資為2000元,每個(gè)課時(shí)補(bǔ)貼20元。定義教師抽象類,派生不同職稱的教師類,編寫程序求若干個(gè)教師的月工資?!窘獯稹?include<iostream>usingnamespacestd;classteacher{public:teacher(chartname[],inttime){strcpy(name,tname);coursetime=time;}virtualintpay()=0;virtualvoidprint()=0;char*getname(){returnname;}intgetcoursetime(){returncoursetime;}protected:charname[30];intcourseti
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 天水師范學(xué)院《工程造價(jià)CBE實(shí)踐》2023-2024學(xué)年第一學(xué)期期末試卷
- 推求設(shè)計(jì)洪水位課程設(shè)計(jì)
- 巖石礦物標(biāo)準(zhǔn)物質(zhì)相關(guān)行業(yè)投資方案范本
- 框架樓房拆除課程設(shè)計(jì)
- 杜邦課程設(shè)計(jì)比賽
- 校本課程開發(fā)與課程設(shè)計(jì)
- 旋轉(zhuǎn)底座課程設(shè)計(jì)
- 智能移動(dòng)小車課程設(shè)計(jì)
- 幼兒園自制支架課程設(shè)計(jì)
- 浮雕壁畫荷花課程設(shè)計(jì)
- 2024-2025年第一學(xué)期小學(xué)德育工作總結(jié):點(diǎn)亮德育燈塔引領(lǐng)小學(xué)生全面成長的逐夢之旅
- 《SYT6848-2023地下儲氣庫設(shè)計(jì)規(guī)范》
- 2024至2030年中國甲醚化氨基樹脂行業(yè)投資前景及策略咨詢研究報(bào)告
- 行政案例分析-第二次形成性考核-國開(SC)-參考資料
- 2024-2025學(xué)年人教版八年級上學(xué)期數(shù)學(xué)期末復(fù)習(xí)試題(含答案)
- 【MOOC】中級財(cái)務(wù)會(huì)計(jì)-北京交通大學(xué) 中國大學(xué)慕課MOOC答案
- “感恩老師”教師節(jié)主題班會(huì)教案【三篇】
- 《園林政策與法規(guī)》課件
- 讀書分享《終身成長》課件
- GB/T 44843-2024在用自動(dòng)扶梯和自動(dòng)人行道安全評估規(guī)范
- 廣東省廣州市2023-2024學(xué)年六年級上學(xué)期語文期末試卷(含答案)
評論
0/150
提交評論