C++網(wǎng)絡作業(yè)6答案_第1頁
C++網(wǎng)絡作業(yè)6答案_第2頁
C++網(wǎng)絡作業(yè)6答案_第3頁
C++網(wǎng)絡作業(yè)6答案_第4頁
C++網(wǎng)絡作業(yè)6答案_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、作業(yè)4 一、 選擇題1.下列關于動態(tài)聯(lián)編的描述中,錯誤的是 。 DA)動態(tài)聯(lián)編是以虛函數(shù)為基礎的B)動態(tài)聯(lián)編是在運行時確定所調(diào)用的函數(shù)代碼的C)動態(tài)聯(lián)編調(diào)用函數(shù)操作是指向?qū)ο蟮闹羔樆驅(qū)ο笠肈)動態(tài)聯(lián)編是在編譯時確定操作函數(shù)的 注:先期聯(lián)編也稱靜態(tài)聯(lián)編,遲后聯(lián)編也稱動態(tài)聯(lián)編。 注釋:動態(tài)聯(lián)編一直要到程序運行時才能確定調(diào)用哪個函數(shù)。虛函數(shù)是實現(xiàn)動態(tài)聯(lián)編的必要條件之一。沒有虛函數(shù)一定不能實現(xiàn)動態(tài)聯(lián)編,但 有虛函數(shù)存在時,必須同時滿足下列條件,才能夠?qū)崿F(xiàn)動態(tài)聯(lián)編: 類之間滿足子類型關系; 調(diào)用虛函數(shù)操作的是指向?qū)ο蟮闹羔樆蛘邔ο笠茫夯蛘呤怯沙蓡T函數(shù)調(diào)用 虛函數(shù)。2關于虛函數(shù)的描述中,正確的是 。D

2、A 虛函數(shù)是一個靜態(tài)成員函數(shù)B)虛函數(shù)是一個非成員函數(shù)C)虛函數(shù)既可以在函數(shù)說明時定義,也可以在函數(shù)實現(xiàn)時定義D)派生類的虛函數(shù)與基類中對應的虛函數(shù)具有相同的參數(shù)個數(shù)和類型 注釋:虛函數(shù)是非靜態(tài)的成員函數(shù)。它不能是友元函數(shù),但可以在另一個類中被聲明 為友元函數(shù)。虛函數(shù)聲明只能出現(xiàn)在類定義的函數(shù)原型聲明中,而不能在成員函數(shù)的函數(shù)體實 現(xiàn)的時候。派生類的虛函數(shù)與基類中對應的虛函數(shù)必須滿足下列條件,否則派生類中的虛函 數(shù)將丟失其虛特性,在調(diào)用時進行靜態(tài)聯(lián)編: 派生類中的虛函數(shù)與基類中的虛函數(shù)具有相同的名稱: 派生類中的虛函數(shù)與基類中的虛函數(shù)具有相同的參數(shù)個數(shù)和相同的對應參數(shù) 類型: 派生類中的虛函數(shù)

3、與基類中的虛函數(shù)的返回值或者相同,或者都返回指針或 引用,并且派生類虛函數(shù)所返回的指針或引用的基類型是基類中的虛函數(shù)所 返回的指針或引用的基類型的子類型。3在下面四個選項中, 是用來聲明虛函數(shù)的。 AA)virtual B)public C)usi ngD)false4 對虛函數(shù)的調(diào)用 。DA)一定使用動態(tài)聯(lián)編B)必須使用動態(tài)聯(lián)編C) 一定使用靜態(tài)聯(lián)編D)不一定使用動態(tài)聯(lián)編注釋:參見第1題的注釋。5實現(xiàn)運行時的多態(tài)性要使用 。DA)重載函數(shù)B)構造函數(shù) C)析構函數(shù) D)虛函數(shù)注釋:參見第1題的注釋。6要實現(xiàn)動態(tài)聯(lián)編,必須通過 調(diào)用虛函數(shù)。AA)對象指針B)成員名限定C)對象名 D)派生類名注

4、釋:參見第1題的注釋。7在派生類中重新定義虛函數(shù)時,除了 方面,其他方面都必須與基類中相應的虛函數(shù)保持一致。DA)參數(shù)個數(shù) B)參數(shù)類型 C)函數(shù)名稱 D)函數(shù)體 注釋:參見第2題的注釋。8下面關于構造函數(shù)和析構函數(shù)的描述,錯誤的是_。DA)析構函數(shù)中調(diào)用虛函數(shù)采用靜態(tài)聯(lián)編B)對虛析構函數(shù)的調(diào)用可以采用動態(tài)聯(lián)編C)當基類的析構函數(shù)是虛函數(shù)時,其派生類的析構函數(shù)也一定是虛函數(shù)D)構造函數(shù)可以聲明為虛函數(shù)注釋:構造函數(shù)不能聲明為虛函數(shù),但析構函數(shù)可以聲明為虛函數(shù)。當基類的析構函 數(shù)聲明為虛函數(shù)時,無論派生類是否使用virtual關鍵字說明,派生類的析構函數(shù)疋是虛函數(shù),對缺省析構函數(shù)亦然。而且,如果

5、滿足動態(tài)聯(lián)編的其他條件,對虛析構函 數(shù)的調(diào)用將采用動態(tài)聯(lián)編。構造函數(shù)不能聲明為虛函數(shù),但在構造函數(shù)中可以調(diào)用虛函數(shù)。在構造函數(shù)或析 構函數(shù)中調(diào)用虛函數(shù),將采用靜態(tài)聯(lián)編。9關于純虛函數(shù)和抽象類的描述中,錯誤的是_。CA)純虛函數(shù)是一種特殊的虛函數(shù),它沒有具體的實現(xiàn)B)抽象類是指具有純虛函數(shù)的類C)一個基類中說明有純虛函數(shù),該基類的派生類一定不再是抽象類D)抽象類只能作為基類來使用,其純虛函數(shù)的實現(xiàn)由派生類給出注釋:帶有純虛函數(shù)的類稱為抽象類。抽象類中的純虛函數(shù)的實現(xiàn)由派生類給出: 但派生類仍可不給出純虛函數(shù)的定義,繼續(xù)作為抽象類存在。10下列描述中,抽象類的特性。DA)可以說明虛函數(shù) B)可以進

6、行構造函數(shù)重載C)可以定義友元函數(shù)D)不能說明其對象注釋:抽象類區(qū)別于其他類的最根本的特征是不能定義對象。11 是一個在基類中說明的虛函數(shù),它在該基類中沒有定義,但要求任何派生類都必須定義自己的版本。CA)虛析構函數(shù)B)虛構造函數(shù) C)純虛函數(shù)D)靜態(tài)成員函數(shù)12如果一個類至少有一個純虛函數(shù),那么就稱該類為_。AA)抽象類 B)虛基類 C)派生類 D)以上都不對13 以下成員函數(shù)表示純虛函數(shù)。CA)virtual int vf(int);B)void vf(in t)=0;C)virtual void vf()=0;D)virtual void vf(i nt)()注釋:純虛函數(shù)的聲明格式如下

7、:virtual函數(shù)返回類型 函數(shù)名 (參數(shù)表)=0 ;注意純虛函數(shù)與虛函數(shù)體為空的區(qū)別。純虛函數(shù)根本就沒有函數(shù)體,而空的虛 函數(shù)的函數(shù)體為空:前者所在的類是抽象類,不能直接進行實例化,而后者所在 的類是可以實例化的:14下面的描述中,正確的是 。AA)virtual可以用來聲明虛函數(shù)B) 含有純虛函數(shù)的類是不可以用來創(chuàng)建對象的,因為它是虛基類C) 即使基類的構造函數(shù)沒有參數(shù),派生類也必須建立構造函數(shù)D) 靜態(tài)數(shù)據(jù)成員可以通過成員初始化列表來初始化注釋:virtual關鍵字既可以用來聲明虛基類,也可以用來聲明虛函數(shù)。含有純虛函數(shù)的類是抽象類,它不能用來定義對象。靜態(tài)數(shù)據(jù)成員的初始化必須在類體外

8、進行。如果所有的基類和子對象構造函數(shù)都不需要參數(shù),派生類也不需要參數(shù)時,派 生類構造函數(shù)可以不定義。15在下面程序中,A、B、C、D四句編譯時不會出現(xiàn)錯誤的是_。A#in cludeclass Basepublic:Base()Base(i nt c): coun t(c) virtual void prin t() con st=0;private: int count;class Derived: public Basepublic:Derived() :Base(0 ) Derived(i nt c): Base(c) void prin t()c onst coutDerivede n

9、dl; ;void mai n()Derived d(10);Base *pb;pb=&d;Derive2s Prin t() called.根據(jù)結果將程序補充完整。#in clude class Basepublic:Base( int i) b=i; virtual void Prin t()=0;protected: int b;class Derivel :public Basepublic: Derive1( int i ):Base( i ) void Print()cout ” Derivel s Print() called. ” e ndl; ;class Derive2:p

10、ublic Base_ public:Derive1(int i ): Base( i ) void Print( ) cout” Derive2 s Print( ) called.“ Pri nt();void mai n()_ Derive1 *d 仁new Derive1(1);_Derive2 *d2=new Derive2 (2);fun (dl);fun (d2);注釋:派生類 Derived1和Derived2從基類Base公有繼承,它們是 Base的子類型。 主程序中兩次調(diào)用fun函數(shù),該函數(shù)通過指針對象obj調(diào)用了 Print函數(shù),得到了不同的輸出結果。而同樣的消息被不同類

11、型的對象接收時導致完全不同的行為,恰好體現(xiàn)了面向?qū)ο蟮亩鄳B(tài)特性。根據(jù)運行時的多態(tài)必須滿足的條件,Print函數(shù)一定是一個虛函數(shù),并且在所有類中都必須進行定義。由于Base類中的Print函數(shù)除了提供一個公共的接口外,沒有其他的作用,所以最好定義為純虛函數(shù)。12 將下列程序補充完整。#in clude class convertpublic:con vert(double i) vail=i;_ virtual void compute( )=0;protected:double val1;double val2;e ndl;e ndl; |;void fun_ convert& f _)();

12、void mai n()l_to_g Igobj (4);f_to_c fcobj(70);fun( Igobj);fun( fcobj);13根據(jù)不同的輸出結果,在函數(shù)Tone中填入正確的語句。#in clude class In strume ntpublic:virtual void Prin t() const coutI nstrume nt:Pri nte ndl; ;class Piano: public In strume ntpublic:void Prin t()co nst coutPia no:Pri nte ndl; ;class Guitar: public In

13、strume ntpublic:void Prin t() const coutGuitar:Pri nte ndl; ;void Tone( ) void mai n()Guitar g;To ne(g);Pia no p;Ton e(p);(1)輸出結果為:In strume nt: :Pri ntIn stmme nt:Pri nt輸出結果為:Guitar: :PrintPia no: :Pri nt(1) In strume nt obj()(2) In strume nt& obj()參考第3題,第一次的輸出是由靜態(tài)聯(lián)編產(chǎn)生的,第二次的輸出是由動態(tài)態(tài)聯(lián)編產(chǎn)生的。14下列程序的運行結果

14、如下:Bases cons.Deriveds cons.Deriveds des.Bases des.根據(jù)結果將程序補充完整。#in clude class Basepublic:Base() coutBases con s.e ndl; _ virtual Base( )_ coutBases des.e ndl; ;class Derived:public Basepublic:Derived() coutDeriveds con s.e ndl; Derived() coutDeriveds des.e ndl; ;void mai n()Base *ptr= new Derived d

15、elete ptr;三、編程1.在作業(yè)1編程1的Point類中完成賦值運算符=、插入運算符 、比較運算符=、!=和 加法運算符+、-的重載。#in clude #in clude class Point public: Point(float x=0, float y=0, float z=0): x_(x), y_(y), z_(z) Point(const Point& p) : x_, y_, z_ 3 A6 A9 C11 C12 A13 C14 A15 A16 C 2“ endl; Base *obj Derive1 *d1=new Derive1(1);_ Derive2 *d2=n

16、ew Derive2(2);11 virtual void compute( )=0; l_to_g(double i ) : convert(i) public: f_to_c(double i ):convert( i ) void compute( ) val2=(val1-32)*5/9;coutval1 ”Fahrenheit is “val2 ”Celsius. ”endl; convert& f13(1) Instrument obj ( )(2) Instrument& obj ( )14 virtual Base( ) new Derived三、編程 1,#include #

17、include class Point public:Point(float x=0, float y=0, float z=0): x_(x), y_(y), z_(z) Point(const Point& p) : x_, y_, z_ void negate() x_ *= -1; y_ *= -1; z_ *= -1; double norm() return sqrt(x_*x_ + y_*y_ + z_*z_); void print() cout ( x_ , y_ , z_ );Point& operator=(const Point& point);bool Point:o

18、perator=(const Point& point) const return x_ = & y_ = & z_ = ;bool Point:operator!=(const Point& point) const return x_ != | y_ != | z_ != ; friend Point operator+(const Point& p1, const Point& p2);friend Point operator-(const Point& p1, const Point& p2);friend ostream& operator(ostream& ostr, const

19、 Point& point); private:float x_, y_, z_;Point operator+(const Point& p1, const Point& p2) return Point+,+,+;Point operator-(const Point& p1, const Point& p2) return Point& operator(ostream& ostr, const Point& point) return ostr ( , , );Point& Point:operator=(const Point& point) x_ = ;y_ = ;z_ = ;re

20、turn *this;void main() Point p(12,-3,4),q(14,5,12),r1,r2; r1=p+q;coutr1()endl;r2=p-q+r1;cout r2()endl; if(r1=r2)cout r1=r2endl;else cout r1!=r2endl;2,#include #include class Point public:Point(int x=0, int y=0, int z=0): x_(x), y_(y), z_(z) Point(const Point& p) : x_, y_, z_ Point& operator +() x_+;

21、y_+;z_+;return *this;Point operator +(int) Point temp(*this); x_+;y_+;z_+;return temp;Point& operator -() x_-;y_-;z_-;return *this;Point operator -(int) Point temp(*this);x_-;y_-;z_-;return temp;void print() cout ( x_ , y_ , z_ );private:int x_, y_, z_;void main() Point p(12,-3,4);cout p = ;();Point

22、 q(p+);cout q = ;();cout p = ;();+(+p);cout p = ;();p-;cout p = ;();3, #include class Shape public:/Shape() /Shape() virtual float GetArea()return -1;class Circle:public Shapepublic:Circle(float radius):itsRadius(radius)/Circle()float GetArea()return *itsRadius*itsRadius; private:float itsRadius;cla

23、ss Rectangle : public Shapepublic:Rectangle(float len,float width): itsLength(len),itsWidth(width); /Rectangle();float GetArea()return itsLength*itsWidth;float GetLength()return itsLength;float GetWidth()return itsWidth;private:float itsWidth;float itsLength;class Square:public Rectanglepublic:Squar

24、e(float len);/Square();Square:Square(float len): Rectangle(len,len) void main()Shape *sp;sp=new Circle(5);cout The area of the Circle is GetArea()endl;delete sp;sp=new Rectangle(4,6);cout The area of the Rectangle is GetArea()endl; delete sp;sp=new Square(5);cout The area of the Square is GetArea()endl; delete sp;4,#include class Shape public:/Shape() /Shape() virtual float GetArea()=0;virtual

溫馨提示

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

評論

0/150

提交評論