問題及**:
(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 ...