Q79.
下列C++程式之輸出結果為何?
電腦軟體設計(C++) · 乙級 · C++ · Q79
難易度分析
3 / 5
需分析類別繼承結構並追蹤程式執行流程,判定成員函式在不同物件類型下之呼叫行為。
正確答案:②
②
:正確答案。function(b) 傳入 base 物件,呼叫 base::member() 輸出 "base class";function(d) 傳入 derived 物件,因 member() 為 virtual function,透過 多型 (polymorphism) 機制呼叫 derived::member() 輸出 "derived class"。
錯誤選項解析
- ①
:此輸出表示兩次呼叫皆執行 base class 的 member(),但由於 derived 物件傳入時,虛擬函式 會透過 動態綁定 (dynamic binding) 呼叫 derived class 的覆寫版本,故第二次應輸出 "derived class"。 - ③
:此輸出順序顛倒,表示先呼叫 derived 再呼叫 base,但程式中 function(b) 先執行且 b 為 base 型別物件,應先輸出 "base class"。 - ④
:此輸出表示兩次皆執行 derived class 的 member(),但 b 是 base 型別物件,並無 derived 的實作,故第一次不可能輸出 "derived class"。
Learning Tip
"本題核心考點為 虛擬函式 (virtual function) 與 多型 (polymorphism) 的 動態綁定 機制。常考陷阱:若 member() 未宣告為 virtual,則會發生 靜態綁定 (static binding),兩次皆輸出 "base class"(因參數型別為 base&)。需區分 virtual 與非 virtual 函式在 基底類別參考/指標 呼叫時的行為差異。"
學員答題分佈
①
0%
②
0%
③
0%
④
0%
此答題分佈是根據學員在 LongePass 模擬考等實際作答紀錄計算而成。與考友分享這道歷屆試題與詳細解析!