Q157.
下列C++程式中那些指令是錯誤的?

電腦軟體設計(C++) · 乙級 · C++ · Q157
難易度分析
4 / 5
本題涉及多層級類別繼承的存取權限分析,且採複選題形式,要求對成員可見性在繼承鏈中的變動有極高精確度的掌握。
正確答案 (複選):③, ④
- ③ 丙:丙(`pub=1;` 位於 `C3::fun3()` 內)是錯誤的。`C3` 以 public 繼承 `C2`,但 `pub` 在 `C2` 中已是 private 成員(因 `C2` private 繼承 `C1`),private 成員無法在衍生類別 `C3` 中存取,會產生編譯錯誤。
- ④ 丁:丁(`pro=1;` 位於 `C3::fun3()` 內)是錯誤的。`pro` 原為 `C1` 的 protected 成員,經 `C2` 的 private 繼承後在 `C2` 中降級為 private,private 成員對衍生類別 `C3` 不可見,故此指令會產生編譯錯誤。
錯誤選項解析
- ① 甲:甲(`pub=1;` 位於 `C2::fun()` 內)是正確的。`C2` 以 private 繼承 `C1`,`C1` 的 public 成員 `pub` 在 `C2` 中變為 private,但在 `C2` 自身的成員函式內仍可存取 private 成員,故此指令合法。
- ② 乙:乙(`pro=1;` 位於 `C2::fun()` 內)是正確的。`C1` 的 protected 成員 `pro` 經 private 繼承後在 `C2` 中變為 private,在 `C2` 的成員函式內可正常存取,故此指令合法。
Learning Tip
"本題核心考點為 C++ 繼承存取控制 與 private 繼承的成員可見性變化。關鍵陷阱:private 繼承會將基底類別的所有 public/protected 成員在衍生類別中全部轉為 private,導致這些成員無法再被下一層衍生類別存取。務必區分「類別自身成員函式可存取 private」與「衍生類別不可存取基底類別的 private」這兩項規則。"
學員答題分佈
①甲0%
②乙0%
③丙0%
④丁0%
此答題分佈是根據學員在 LongePass 模擬考等實際作答紀錄計算而成。與考友分享這道歷屆試題與詳細解析!