LONGEPASS
電腦軟體設計(C++)/C++/Q157
困難
正確率 -
Q157.

下列C++程式中那些指令是錯誤的?電腦軟體設計(C++) 乙級 C++ 第 157 題 題目 第一張圖片 電腦軟體設計(C++) 乙級 C++ 第 157 題 題目 第二張圖片 電腦軟體設計(C++) 乙級 C++ 第 157 題 題目 第三張圖片

電腦軟體設計(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 模擬考等實際作答紀錄計算而成。與考友分享這道歷屆試題與詳細解析!

相似類型題目