Q65.
有兩個類別One 與Two,定義如下
,下列有關A, B, C 三個陣列之宣告,何者是正確的?
電腦軟體設計(C++) · 乙級 · C++ · Q65
難易度分析
3 / 5
本題要求針對三種不同的陣列宣告方式分別進行正確性分析,涉及指標與物件實體在繼承關係中的型別相容性判斷,需要考生能精確區分多型應用與記憶體配置的限制。
正確答案:②僅甲、乙正確
② 僅甲、乙正確:此選項正確。甲(基底類別指標陣列) 符合 C++ 的 向上轉型(upcasting) 規則,基底指標可安全指向衍生物件;乙(衍生類別指標陣列指向衍生物件) 為標準型別匹配,兩者皆為合法的 多型(polymorphism) 應用。
錯誤選項解析
- ① 甲、乙、丙均正確:此選項錯誤。在 C++ 繼承機制 中,並非所有陣列宣告方式皆合法。基底類別指標陣列 可指向衍生物件,但 衍生類別指標陣列 不可指向基底物件(需強制轉型),且 物件實體陣列 涉及 slicing 問題,故丙宣告不正確。
- ③ 僅甲、丙正確:此選項錯誤。雖然甲(基底指標陣列)正確,但丙涉及 物件切片(object slicing) 或 型別不匹配 問題。將衍生物件存入基底物件陣列會遺失衍生類別特有的成員,此為 C++ 中常見的 記憶體配置陷阱。
- ④ 僅乙、丙正確:此選項錯誤。乙宣告正確,但甲同樣正確(基底類別指標陣列為 多型設計 的核心機制)。排除甲會忽略 C++ 中 動態繫結(dynamic binding) 與 虛擬函式(virtual function) 的基礎應用。
Learning Tip
"本題核心考點為 C++ 繼承與多型的指標宣告規則。關鍵觀念:① 基底類別指標 可指向任何衍生物件(向上轉型安全);② 衍生類別指標 不可直接指向基底物件(需 `dynamic_cast`);③ 物件實體陣列 會發生 object slicing,導致衍生類別特有資料遺失。實務上建議優先使用 指標或參考 操作多型物件,避免值傳遞造成的切片問題。"
學員答題分佈
①甲、乙、丙均正確0%
②僅甲、乙正確0%
③僅甲、丙正確0%
④僅乙、丙正確0%
此答題分佈是根據學員在 LongePass 模擬考等實際作答紀錄計算而成。與考友分享這道歷屆試題與詳細解析!