第十二周閱讀程式4 虛基類 同名資料成員

2021-07-02 21:10:49 字數 1063 閱讀 5702

問題及**:

(1)程式執行後,執行結果是多少?

(2)將程式中有注釋的兩條語句修改為注釋的內容,即將「class b:public a {};」修改為「class b:virtual public a{};」,「class c:public a {}; 」修改為「class c:virtual public a{};」,重新編譯執行程式,程式的執行結果又是多少?

#includeusing namespace std;

class a

;class b:public a {}; // class b:virtual public a{};

class c:public a {}; // class c:virtual public a{};

class d:public b,public c

};int main()

{ d d;

d.b::n=10;

d.c::n=20;

cout<

執行結果:

1.修改前

int main()

{    d d;

d.b::n=10;          //d的物件成員 b的資料成員n賦值為10

d.c::n=20;          //d的物件成員 c的資料成員n賦值為20

cout執行結果:

2.修改後

因為 b和c都變成了虛擬基類  所以在d中的n實際上只是乙個資料成員

所以第一次賦值為10,第二次賦值為20,實際是把第一次的賦值給修改掉了,所以最後輸出結果為20,

知識點總結:

虛擬基類b,c中同名資料成員和成員函式,實際上都是最初始基類a的資料成員或成員函式

所以在派生類d中呼叫時相當於直接呼叫了基類a的資料成員或成員函式

第十二周 閱讀程式

檔名稱 test.cpp 作 者 呼亞萍 完成日期 2015年5月27日 版 本 號 v1.0 問題描述 閱讀程式,寫出執行結果 程式輸入 相應的程式 程式輸出 對應得結果 include using namespace std class a a int i void print class b ...

第十二周閱讀程式(5)

a include using namespace std class a void printa void printa void printa void printa 將會發生錯誤的一行刪除 p printb 對餘下的程式,你認為輸出是 a 1 b 1 a 2 b 3 實際執行的輸出是 那一行的...

第十二周 專案一 閱讀程式(4)

問題及 檔名稱 project4.cpp 作 者 李楠 完成日期 2014年11月13日 版 本 號 v1.0 問題描述 理解函式的預設引數 輸入描述 略 程式輸出 略 include using namespace std const double pi 3.1415926 float area ...