實驗六 多型性與虛函式

2021-08-20 18:05:50 字數 1339 閱讀 8495

了解靜態聯編的動態聯編的概念。

1.分析並除錯下列程式。

#include

using namespace std;

class base

(1)找出以上程式中使用了過載和覆蓋函式。

答:base類中函式void g(); 和void h();與derived類中的函式void g(); 和void h();函式名相同,引數型別不同,構成了函式過載。

(2)寫出程式的輸出結果,並解釋輸出結果。

程式的輸出結果如下:

2. 分析並除錯下列程式

#include

using namespace std;

class base

(1)找出以上程式中使用了過載和覆蓋函式。

答:base類中函式void f(); 在同一作用域中,函式名相同,引數型別不同,構成了函式過載。

(2)寫出程式的輸出結果,並解釋輸出結果。

程式的輸出結果如下:

輸出結果分析:

pb和pd指向同一位址,它們執行結果應該是相同的,但實際執行出來的結果卻不相同,原因是決定pb和pd呼叫函式執行結果的不是他們指向的位址,而是他們的指標型別。「只有在通過基類指標或引用間接指向派生類子型別時多型性才會起作用」。在程式中pb是基類指標,pd是派生類指標,pd的所有函式呼叫都只是呼叫自己的函式,和多型性無關,所以pd的所有函式呼叫的結果都輸出derived::是完全正常的;pb的函式呼叫如果有virtual則根據多型性呼叫派生類的,如果沒有virtual則是正常的靜態函式呼叫,還是呼叫基類的,所以有virtual的f函式呼叫輸出derived::,其它兩個沒有virtual則還是輸出base::。

6. 把實驗5中的第4題的shape類定義為抽象類,提供共同操作介面的純虛函式。twodimshape類和threedimshape類仍然抽象類,第3層具體類才能提供全部函式的實現。在測試函式中,使用基類指標實現不同派生類物件的操作。

答:過載與覆蓋的區別:通過本次的學習和實踐,我學到了很多知識,比如了解靜態聯編的動態聯編的概念並掌握動態聯編的條件;與此同時我還總結出了

靜態聯編和動態聯編的區別以及

過載與覆蓋的區別。通過這些知識的學習與總結讓我對於本課程的學習又掌握了一些不同的知識點,擴大了自己學習的範圍,為自己及下一步的學習也有了很大的幫助。

實驗六 多型性與虛函式

一 實驗目的和要求 了解靜態聯編和動態聯編的概念。掌握動態聯編的條件。二 實驗內容 1 分析並除錯下列程式。cpp view plain copy sy6 1.cpp include using namespace std class base class derived public base i...

複習六 虛函式與多型性

一 靜態聯編 1 聯編是指乙個程式模組 之間互相關聯的過程。靜態聯編,是程式的匹配 連線在編譯階段實現,也稱為早期匹配。過載函式使用靜態聯編。動態聯編是指程式聯編推遲到執行時進行,所以又稱為晚期聯編。switch 語句和 if 語句是動態聯編的例子。2 過載函式要根據型別 引數進行匹配,一般在編譯階...

實驗6,多型性與虛函式

一 實驗目的和要求 了解靜態聯編和動態聯編的概念。掌握動態聯編的條件。二 實驗內容 1 分析並除錯下列程式。sy6 1.cpp includeusing namespace std class base 1 找出以上程式中使用了過載和覆蓋的函式。答 base類中函式void g 和void h 與d...