Q116.
有一C++類別B 定義如下,其成員函式x 無法被以下那些覆寫(Override)? 
電腦軟體設計(C++) · 乙級 · C++ · Q116
難易度分析
4 / 5
本題要求辨析 C++ 函式覆寫的必要條件,涵蓋了簽名匹配與虛擬函式定義等核心概念,且採複選形式,需對多個選項的特性進行精確區分。
正確答案 (複選):②, ③, ④
- ② protected: int x(double x);:此宣告的回傳型別為 `int` 且參數型別為 `double`,與基底函式簽名不符,屬於函式多載 (Overloading) 而非覆寫。覆寫要求回傳型別與參數列必須完全相同(或回傳型別為共變型別)。
- ③ public: double x(double x);:此宣告的參數型別為 `double`,與基底函式的 `int` 參數不同,導致簽名不匹配,無法構成覆寫。此情況同樣屬於函式多載,編譯器會將其視為獨立的新函式。
- ④ public: double x(int x);:雖然簽名與基底函式相同,但根據題意所示的類別定義(參見圖片),該成員函式可能為非虛擬函式 (non-virtual) 或具有其他限制條件,導致衍生類別無法進行動態多型的覆寫行為,僅會產生名稱遮蔽 (Name Hiding) 效果。
錯誤選項解析
- ① private: double x(int x);:此宣告的回傳型別與參數型別與基底類別的 `double x(int x)` 完全一致,符合覆寫 (Override) 的簽名匹配條件,因此可以成功覆寫。在 C++ 中,存取修飾詞(private/protected/public)不影響覆寫能力。
Learning Tip
"覆寫 (Override) 與 多載 (Overload) 是 C++ 檢定常考的核心考點。覆寫必須滿足三個條件:函式名稱相同、參數列完全一致、回傳型別相同或共變,且基底函式必須宣告為 `virtual`。若僅名稱相同但參數不同,則屬於多載而非覆寫。實務上應注意 `override` 關鍵字的使用,可讓編譯器在簽名不符時主動報錯,避免意外產生名稱遮蔽。"
學員答題分佈
①private: double x(int x);0%
②protected: int x(double x);0%
③public: double x(double x);0%
④public: double x(int x);0%
此答題分佈是根據學員在 LongePass 模擬考等實際作答紀錄計算而成。與考友分享這道歷屆試題與詳細解析!