第五章 多型性和虛函式(課後習題)

2021-08-20 15:17:20 字數 3542 閱讀 9107

一、填空題

(1)c++的兩種聯編方式為: ( 靜態 ) 聯編和 ( 動態 ) 聯編。

(2)c++支援兩種多型性,靜態聯編所支援的多型性被稱為 ( 編譯時的多型性 ) 、動態聯編所支援的多型性被稱為 (執行時的多型性 )。

(3)過載函式在

編譯時表現出多型性,就是

( 靜態 )

聯編;而虛函式則在執行時表現出

多型性是

( 動態 ) 

聯編。(4)為了區分過載函式,把乙個派生類中重定義基類的虛函式稱為 ( 覆蓋  ) 。

(5)如果派生類與基類的虛函式僅僅返回型別不同,其餘相同,則c++認為是 ( 使用不恰當的虛函式 ) 。

(6)在建構函式和析構函式中呼叫虛函式時,採用 ( 靜態 ) 聯編。

(7)純虛函式的定義是在虛函式定義的基礎上,再讓函式等於(  0 ) 。

(8)對於包含有純虛函式的類被稱為 ( 抽象類 ) 。

二、選擇題(至少選乙個,可以多選)

(1)用關鍵字( a )標記的函式被稱為虛函式。

a. virtual                   b. private                    c. public                 d. protected

(2)在c++中,要實現動態聯編,必須使用( d )呼叫虛函式。

a. 類名                      b. 派生類指標               c. 物件名                 d. 基類指標

(3)下列函式中,可以作為虛函式的是( bd )。

a. 普通函式                b. 非靜態成員函式        c. 建構函式             d. 析構函式

(4)在派生類中,過載乙個虛函式時,要求函式名、引數的個數、引數的型別、引數的順序和函式的返回值( b )。

a. 不同                       b. 相同                         c. 相容                    d. 部分相同

(5)使用虛函式保證了在通過乙個基類型別的指標(含引用)呼叫乙個虛函式時,c++系統對該呼叫進行( a ),但是,在通過乙個物件訪問乙個虛函式時,使用( b )。

a. 動態聯編                b. 靜態聯編                   c. 動態編譯              d. 靜態編譯

(6)下面函式原型宣告中,(  b  )宣告的func()為純虛函式。

a. void func()=0;                                            b. virtual void func()=0;

c. vitual void func();                                       d. virtual void func(){};

(7)若乙個類中含有純虛函式,則該類稱為(  c  )。

a. 基類                       b. 虛基類                       c. 抽象類                 d. 派生類

(8)假設

myclass為抽象類,下列宣告( cd  )是錯誤的。

a. myclass& func(int);                                     b. myclass * pp;

c. int func(myclass);                                        d. myclass obj;

(9)下面描述中,( bd  )是正確的。

a. 虛函式是沒有實現的函式                                b. 純虛函式的實現是在派生類中定義

c. 抽象類是只有純虛函式的類                             d. 抽象類指標可以指向不同的派生類

三、判斷題

(1)抽象類中只能有乙個純虛數。             ( 錯 )

(2)建構函式和析構函式都不能說明為虛基數。     ( 錯 )

(3)程式中可以說明抽象類的指標或引用。        ( 對 )

(4)乙個類中的虛基數說明不僅對基類中的同名函式有影響,而且對它的派生類中的重定義的函式也有影響    ( 錯 )

(5)在建構函式和析構函式中呼叫虛函式時,採用動態聯編,即它們所呼叫的虛函式時是在派生類中重定義的虛函式。 ( 錯 )

(6)因為沒有為純虛函式定義**,所以在建構函式和析構函式內均不可呼叫純虛函式。               ( 對 )

四、簡答題

(1)什麼叫做多型性?在c++中是如何實現多型的?

答:多型性就是同一符號或名字在不同情況下具有不同解釋的現象,即是指同乙個函式的多種形態。c++可以支援兩種多型性,編譯時的多型性和執行時的多型性。

多型性有兩種變現形式:一種是不同的物件在收到相同的訊息時,產生不同的動作,主要通過虛函式來實現;另一種是同一物件收到相同的訊息卻產生不同的函式呼叫,主要通過函式過載來實現。

(2)虛函式與一般過載函式有哪些區別?

答:虛函式與一般過載函式的區別,主要有以下幾點:

過載函式只要求函式有相同的函式名,並且過載函式是在相同作用域中定義的名字相同的不同函式。而虛函式不僅要求函式名相同,而且要求函式的簽名、返回型別也相同。也就是說函式原型必須完全相同,而且虛函式特性必須是體現在基類和派生類的類層次結構中。

過載函式可以是成員函式或友元函式,而虛函式只能是非靜態成員函式。

建構函式可以過載,析構函式不能過載。正好相反,建構函式不能定義為虛函式,析構函式能定義為虛函式。

過載函式的呼叫是以所傳遞引數序列的差別作為呼叫不同函式的依據,而虛函式是根據物件的不同去呼叫不同類的虛函式。

過載函式在編譯時表現出多型性,是靜態聯編;而虛函式則在執行時表現出多型性是動態聯編,因此說動態聯編是c++的精髓。

(3)什麼叫做抽象類?抽象類有何作用?抽象類的派生類是否一定要給出純虛函式的實現?

答:乙個類可以說明多個純虛函式,對於包含有純虛函式的類被稱為抽象。抽象類用來描述一組子類的共同的操作介面,它用作基類。抽象類的派生類不一定要給出純虛函式的實現。如果沒有在派生類中給出純虛函式的實現,則需在派生類中仍將它說明為純虛函式,否則編譯器將給出錯誤資訊。說明了純虛函式的派生類仍是抽象類。

(4)能否宣告虛析構函式?有何用途?

答:能宣告虛析構函式。如果乙個類中定義了虛函式,析構函式也應說明為虛函式。delete運算子和析構函式一起工作,當使用delete刪除乙個物件時,delete隱含著對析構函式的一次呼叫,這樣保證了使用基類型別的指標能夠呼叫適當的析構函式針對不同的物件進行清除工作。

五、程式設計題

(1)使用虛函式編寫程式求球體和圓柱體的體積及表面積。由於球體和圓柱體都可以看作由圓繼承而來,所以可以定義圓類circle作為基類。在circle類中定義乙個資料成員radius和兩個虛函式area()和volume()。由circle 類派生sphere類和column類。在派

生類中對虛函式area()和volume()重新定義,分別求球體和圓柱體的體積及表面積。

(2)編寫乙個程式,用於計算正方形、三角形和圓的面積及計算各類形狀的總面積。

第五章 多型性和虛函式(課後習題)

一 填空題 1 c 的兩種聯編方式為 靜態 聯編和 動態 聯編。2 c 支援兩種多型性,靜態聯編所支援的多型性被稱為 編譯時的多型性 動態聯編所支援的多型性被稱為 執行時的多型性 3 過載函式在 編譯時表現出多型性,就是 靜態 聯編 而虛函式則在執行時表現出 多型性是 動態 聯編。4 為了區分過載函...

第五章多型性和虛函式 課後習題

一 填空題 1 c 的兩種聯編方式為 靜態 聯編和 動態 聯編。2 c 支援兩種多型性,靜態聯編所支援的多型性被稱為 編譯時的多型性 動態聯編所支援的多型性被稱為 執行時的多型性 3 過載函式在 編譯時表現出多型性,就是 靜態 聯編 而虛函式則在執行時表現出 多型性是 動態 聯編。4 為了區分過載函...

第五章 課後習題

第一題 輸入乙個字串,將該字串中下標為偶數的字元組成新串並通過字元格式化方式顯示 str1 input 請輸入乙個字串 str2 for i in range len str1 if i 2 0 str2 str1 i print format str2 第二題 編寫程式,生成乙個由15個不重複的大...