C++網絡作業6答案_第1頁
C++網絡作業6答案_第2頁
C++網絡作業6答案_第3頁
C++網絡作業6答案_第4頁
C++網絡作業6答案_第5頁
已閱讀5頁,還剩8頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、作業4一、選擇題1 .下列關于動態聯編的描述中,錯誤的是。DA)動態聯編是以虛函數為基礎的B)動態聯編是在運行時確定所調用的函數代碼的C)動態聯編調用函數操作是指向對象的指針或對象引用D)動態聯編是在編譯時確定操作函數的注:先期聯編也稱靜態聯編,遲后聯編也稱動態聯編。2關于虛函數的描述中,正確的是。DA)虛函數是一個靜態成員函數B)虛函數是一個非成員函數C)虛函數既可以在函數說明時定義,也可以在函數實現時定義D)派生類的虛函數與基類中對應的虛函數具有相同的參數個數和類型注釋:虛函數是非靜態的成員函數。它不能是友元函數,但可以在另一個類中被聲明為友元函數。虛函數聲明只能出現在類定義的函數原型聲明

2、中,而不能在成員函數的函數體實現的時候。派生類的虛函數與基類中對應的虛函數必須滿足下列條件,否則派生類中的虛函數將丟失其虛特性,在調用時進行靜態聯編: 派生類中的虛函數與基類中的虛函數具有相同的名稱: 派生類中的虛函數與基類中的虛函數具有相同的參數個數和相同的對應參數類型: 派生類中的虛函數與基類中的虛函數的返回值或者相同,或者都返回指針或引用,并且派生類虛函數所返回的指針或引用的基類型是基類中的虛函數所返回的指針或引用的基類型的子類型。3在下面四個選項中,是用來聲明虛函數的。AA)virtualB)publicC)usingD)false4對虛函數的調用。DA)一定使用動態聯編B)必須使用動

3、態聯編C)一定使用靜態聯編D)不一定使用動態聯編注釋:參見第1題的注釋。5實現運行時的多態性要使用。DA)重載函數B)構造函數C)析構函數D)虛函數注釋:參見第1題的注釋。6要實現動態聯編,必須通過調用虛函數。AA)對象指針B)成員名限定C)對象名D)派生類名78士7E910111213的14注釋:參見第1題的注釋。在派生類中重新定義虛函數時,除了方面,其他方面都必須與基類中相應的虛函數保持一致。DA)參數個數B)參數類型C)函數名稱D)函數體注釋:參見第2題的注釋。下面關于構造函數和析構函數的描述,錯誤的是_。DA)析構函數中調用虛函數采用靜態聯編B)對虛析構函數的調用可以采用動態聯編C)當

4、基類的析構函數是虛函數時,其派生類的析構函數也一定是虛函數D)構造函數可以聲明為虛函數注釋:構造函數不能聲明為虛函數,但析構函數可以聲明為虛函數。當基類的析構函數聲明為虛函數時,無論派生類是否使用virtual關鍵字說明,派生類的析構函數是虛函數,對缺省析構函數亦然。而且,如果滿足動態聯編的其他條件,對虛析構函數的調用將采用動態聯編。構造函數不能聲明為虛函數,但在構造函數中可以調用虛函數。在構造函數或析構函數中調用虛函數,將采用靜態聯編。關于純虛函數和抽象類的描述中,錯誤的是_。CA)純虛函數是一種特殊的虛函數,它沒有具體的實現B)抽象類是指具有純虛函數的類C)一個基類中說明有純虛函數,該基類

5、的派生類一定不再是抽象類D)抽象類只能作為基類來使用,其純虛函數的實現由派生類給出注釋:帶有純虛函數的類稱為抽象類。抽象類中的純虛函數的實現由派生類給出:但派生類仍可不給出純虛函數的定義,繼續作為抽象類存在。下列描述中,是抽象類白特性。d|A)可以說明虛函數B)可以進行構造函數重載C)可以定義友元函數D)不能說明其對象注釋:抽象類區別于其他類的最根本的特征是不能定義對象。是一個在基類中說明的虛函數,它在該基類中沒有定義,但要求任何派生類都必須定義自己的版本。CA)虛析構函數B)虛構造函數C)純虛函數D)靜態成員函數如果一個類至少有一個純虛函數,那么就稱該類為_。AA)抽象類B)虛基類C)派生類

6、D)以上都不對以下成員函數表示Z虛函數。CA)virtualintvf(int);B)voidvf(int)=0C)virtualvoidvf()=0;D)virtualvoidvf(int)()函數的函數體為空:前者所在的類是抽象類,不能直接進行實例化,而后者所在類是可以實例化的:卜面的描述中,正確的是。AA)virtual可以用來聲明虛函數B)含有純虛函數的類是不可以用來創建對象的,因為它是虛基類C)即使基類的構造函數沒有參數,派生類也必須建立構造函數D)靜態數據成員可以通過成員初始化列表來初始化注釋:virtual關鍵字既可以用來聲明虛基類,也可以用來聲明虛函數。含有純虛函數的類是抽象類

7、,它不能用來定義對象。靜態數據成員的初始化必須在類體外進行。如果所有的基類和子對象構造函數都不需要參數,派生類也不需要參數時,派生類構造函數可以不定義。15在下面程序中,A、B、C、D四句編譯時不會出現錯誤的是_。A#include<>classBasepublic:Base()Base(intc):count(c)virtualvoidprint()const=0;private:intcount;classDerived:publicBasepublic:Derived。:Base(0)Derived(intc):Base(c)voidprint()constcout<&

8、lt;"Derived"<<endl;voidmain()Derivedd(10);Base*pb;pb=&d;Derive2'sPrint()called.根據結果將程序補充完整。#include<>classBasepublic:Base(inti)b=i;CDvirtualvoidPrint()=0;protected:intb;classDerivel:publicBasepublic:Derive1(inti):Base(i)voidPrint()cout<<"Derivel'sPrint()c

9、alled.”<<endl;;classDerive2:publicBase_public:Derive1(inti):Base(i)voidPrint()cout<<"Derive2'sPrint()called."<<endl;voidfun(Base*obj_)obj->Print();voidmain()_Derive1*d1=newDerive1(1);_Derive2*d2=newDerive2(2);fun(dl);fun(d2);注釋:派生類Derived1和Derived2從基類Base公有繼承,它們是Ba

10、se的子類型。主程序中兩次調用fun函數,該函數通過指針對象obj調用了Print函數,得到了不同的輸出結果。而同樣的消息被不同類型的對象接收時導致完全不同的行為,恰好體現了面向對象的多態特性。根據運行時的多態必須滿足的條件,Print函數一定是一個虛函數,并且在所有類中都必須進行定義。由于Base類中的Print函數除了提供一個公共的接口外,沒有其他的作用,所以最好定義為純虛函數。12將下列程序補充完整。#include<>classconvertpublic:convert(doublei)vail=i;_CDvirtualvoidcompute()=0;protected:d

11、oubleval1;doubleval2;<<endl;<<endl;;voidfun(_convert&f_)();voidmain()l_to_glgobj(4);f_to_cfcobj(70);fun(lgobj);fun(fcobj);13根據不同的輸出結果,在函數Tone中填入正確的語句。#include<>classInstrumentpublic:virtualvoidPrint()constcout<<"Instrument:Print"<<endl;classPiano:publicIns

12、trumentpublic:voidPrint()constcout<<"Piano:Print"<<endl;classGuitar:publicInstrumentpublic:voidPrint()constcout<<"Guitar:Print"<<endl;voidTone()voidmain()Guitarg;Tone(g);Pianop;Tone(p);(1)輸出結果為:Instrument:PrintInstmment:Print(2)輸出結果為:Guitar:PrintPiano:Prin

13、t(1) Instrumentobj()(2) Instrument&obj()參考第3題,第一次的輸出是由靜態聯編產生的,第二次的輸出是由動態態聯編產生14下列程序的運行結果如下:Base'scons.Derived'scons.Derived'sdes.Base'sdes.根據結果將程序補充完整。#include<>classBasepublic:Base()cout<<"Base'scons."<<endl;_virtualBase()_cout<<"Base&#

14、39;sdes."<<endl;classDerived:publicBasepublic:Derived()cout<<"Derived'scons."<<endl;Derived()cout<<"Derived'sdes."<<endl;voidmain()Base*ptr=newDeriveddeleteptr;三、編程1.在作業1編程1的Point類中完成賦值運算符=、插入運算符<<、比較運算符=、!=和加法運算符+、-的重載。#include<

15、;>#include<>classPointpublic:Point(floatx=0,floaty=0,floatz=0):x_(x),y_(y),z_(z)Point(constPoint&p):x_,y_,z_3A6A9C11C12A13C14A15A16C2“<<endl;Base*objDerive1*d1=newDerive1(1);_Derive2*d2=newDerive2(2);11virtualvoidcompute()=0;l_to_g(doublei):convert(i)public:f_to_c(doublei):convert

16、(i)voidcompute()val2=(val1-32)*5/9;cout<<val1<<”Fahrenheitis“<<val2<<”Celsius.”<<endl;convert&f13Instrumentobj()(2)Instrument&obj()14virtualBase()newDerived三、編程1,#include<>#include<>classPointpublic:Point(floatx=0,floaty=0,floatz=0):x_(x),y_(y),z_(z)

17、Point(constPoint&p):x_,y_,z_voidnegate()x_*=-1;y_*=-1;z_*=-1;doublenorm()returnsqrt(x_*x_+y_*y_+z_*z_);voidprint()cout<<'('<<x_<<","<<y_<<","<<z_<<")"Point&operator=(constPoint&point);boolPoint:operator=(cons

18、tPoint&point)constreturnx_=&&y_=&&z_=;boolPoint:operator!=(constPoint&point)constreturnx_!=|y_!=|z_!=;friendPointoperator+(constPoint&p1,constPoint&p2);friendPointoperator-(constPoint&p1,constPoint&p2);friendostream&operator<<(ostream&ostr,constP

19、oint&point);private:floatx_,y_,z_;Pointoperator+(constPoint&p1,constPoint&p2)returnPoint+,+,+;Pointoperator-(constPoint&p1,constPoint&p2)returnPoint&operator<<(ostream&ostr,constPoint&point)returnostr<<"("<<<<","<<<

20、<","<<<<")"Point&Point:operator=(constPoint&point)x_=;y_=;z_=;return*this;voidmain()Pointp(12,-3,4),q(14,5,12),r1,r2;r1=p+q;cout<<r1<<()<<endl;r2=p-q+r1;cout<<r2<<()<<endl;if(r1=r2)cout<<"r1=r2"<<end

21、l;elsecout<<"r1!=r2"<<endl;2,#include<>#include<>classPointpublic:Point(intx=0,inty=0,intz=0):x_(x),y_(y),z_(z)Point(constPoint&p):x_,y_,z_Point&operator+()x_+;y_+;z_+;return*this;Pointoperator+(int)Pointtemp(*this);x_+;y_+;z_+;returntemp;Point&operator-

22、()x_-;y_-;z_-;return*this;Pointoperator-(int)Pointtemp(*this);x_-;y_-;z_-;returntemp;voidprint()cout<<'('<<x_<<","<<y_<<","<<z_<<")"private:intx_,y_,z_;voidmain()Pointp(12,-3,4);cout<<"p="();Pointq(p+);co

23、ut<<"q="();cout<<"p="();+(+p);cout<<"p="();p-;cout<<"p="();3,#include<>classShapepublic:/Shape()/Shape()virtualfloatGetArea()return-1;classCircle:publicShapepublic:Circle(floatradius):itsRadius(radius)/Circle()floatGetArea()return

24、*itsRadius*itsRadius;private:floatitsRadius;classRectangle:publicShapepublic:Rectangle(floatlen,floatwidth):itsLength(len),itsWidth(width);/Rectangle();floatGetArea()returnitsLength*itsWidth;floatGetLength()returnitsLength;floatGetWidth()returnitsWidth;private:floatitsWidth;floatitsLength;classSquar

25、e:publicRectanglepublic:Square(floatlen);/Square();Square:Square(floatlen):Rectangle(len,len)voidmain()Shape*sp;sp=newCircle(5);cout<<"TheareaoftheCircleis"<<sp->GetArea()<<endl;deletesp;sp=newRectangle(4,6);cout<<"TheareaoftheRectangleis"<<sp->GetArea()<<endl;deletesp;sp=newSquare(5);cout<<"TheareaoftheSquareis"<<sp->GetArea()<<endl;deletesp;4,#include<>classShapepublic:/Shape()/Shape()virtualfloatGetArea()=0;virtualfloatGetPerim()=0;classCircle:publicShapepublic:

溫馨提示

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

評論

0/150

提交評論