Q137.
下列C++程式碼中,那些為正確的指令?


電腦軟體設計(C++) · 乙級 · C++ · Q137
難易度分析
4 / 5
本題要求精確區分 C++ 繼承體系中基底類別與衍生類別之間的型別轉換方向。由於採複選形式,必須對每一項指派指令的合法性進行完整判別,且涉及隱式轉型的限制,具有較高的判別難度。
正確答案 (複選):①, ②, ④
- ① 甲:甲(c1=*p1)正確:`p1` 為 `C1*` 型別指標,解參考後得到 `C1` 型別物件,可直接以物件拷貝(Object Copy)方式賦值給同型別的 `C1` 物件 `c1`,型別完全匹配。
- ② 乙:乙(c1=*p2)正確:`p2` 為 `C2*` 型別指標,`C2` 公有繼承(public inheritance)自 `C1`,解參考後可透過向上轉型(Upcasting)隱式轉換為基底類別 `C1` 型別,因此可賦值給 `c1`。
- ④ 丁:丁(c2=*p2)正確:`p2` 為 `C2*` 型別指標,解參考後得到 `C2` 型別物件,可直接賦值給同型別的 `C2` 物件 `c2`,型別完全匹配。
錯誤選項解析
- ③ 丙:丙(c2=*p1)錯誤:`p1` 為基底類別 `C1*` 指標,無法隱式轉換為衍生類別 `C2` 型別,此為向下轉型(Downcasting),C++ 不允許隱式向下轉型,會產生型別不相容(Type Incompatibility)編譯錯誤。
Learning Tip
"本題核心考點為 C++ 繼承體系中的型別轉換規則。向上轉型(Derived→Base)可隱式進行,但向下轉型(Base→Derived)必須使用 `dynamic_cast` 或 `static_cast` 明確轉型,否則會編譯失敗。常考陷阱是混淆指標型別與物件型別的指派方向,切記「子類別物件可視為父類別,但父類別物件不可視為子類別」。"
學員答題分佈
①甲0%
②乙0%
③丙0%
④丁0%
此答題分佈是根據學員在 LongePass 模擬考等實際作答紀錄計算而成。與考友分享這道歷屆試題與詳細解析!