地方政府公務人員四等-資訊處理類科計算機概要110 年第 23 題單選題
針對C++程式語言中的純虛擬函式(pure virtual function),下列敍述何者錯誤?
A一個類別(class)如果含有純虛擬函式,則該類別無法用來建立一個物件(object)
B一個類別如果含有純虛擬函式,則該類別無法繼承其他類別正確答案
C一個類別若繼承含有純虛擬函式的類別,可以選擇實作繼承的純虛擬函式,也可以選擇保持純虛擬函式不加以實作
D一個類別可以同時含有純虛擬函式與一般虛擬函式
B正確答案
含純虛擬函式的類別是抽象類別,不能實例化,但仍可繼承其他類別。
為什麼答案是 B
錯誤敘述(本題要選)。含純虛擬函式只影響「能否實例化」,與「能否繼承其他類別」無關。抽象類別仍可繼承其他類別,甚至多重繼承。
載入中…
完整詳解
Pro · 無限重點 含純虛擬函式的類別是抽象類別,不能實例化,但仍可繼承其他類別。
抽象類別 = 不能 new,但繼承關係不受影響。選 B 最違反 OOP 基本原則。
逐選項分析
A✕
正確敘述。含純虛擬函式的類別稱為抽象類別(abstract class),無法直接建立物件,只能當作基底類別被繼承。
B✓ 正確
錯誤敘述(本題要選)。含純虛擬函式只影響「能否實例化」,與「能否繼承其他類別」無關。抽象類別仍可繼承其他類別,甚至多重繼承。
C✕
正確敘述。子類別可選擇實作純虛擬函式變成具體類別,或不實作繼續保持抽象狀態(此時子類別仍為抽象類別,無法實例化)。
D✕
正確敘述。同一類別中可以同時宣告純虛擬函式(= 0)與一般虛擬函式(virtual),兩者並存完全合法。
C++ 虛擬函式三兄弟比較
| 類型 | 語法 | 必須在子類實作? | 可否實例化 |
|---|
| 一般函式 | void f(); | 否 | 可 |
| 虛擬函式 | virtual void f(); | 否(可覆寫) | 可 |
| 純虛擬函式 | virtual void f() = 0; | 是(否則仍抽象) | 否(抽象類別) |
B 選項把「不能實例化」偷換成「不能繼承其他類別」。這是兩個完全無關的概念——純虛擬函式限制的是「建立物件」,而不是「繼承關係」。抽象類別本身也可以是別人的子類別。