公務人員特種考試計算機大意108 年第 31 題單選題
有關物件導向語言 C++建構子(Constructor)的敘述,下列何者正確?
A使用時一定要配合 new 指令
B一個類別只能有一個建構子
C名稱要跟類別名稱一致正確答案
D可視性一定要宣告成 public
C正確答案
C++ 建構子的名稱必須與類別名稱完全相同,這是語法強制規定。
為什麼答案是 C
建構子的定義就是『與類別同名且無回傳型別的特殊成員函式』,名稱必須與類別名稱完全一致,編譯器才會識別為建構子。
載入中…
完整詳解
Pro · 無限重點 C++ 建構子的名稱必須與類別名稱完全相同,這是語法強制規定。
記住一句話:『建構子 = 同名函式,無回傳型別』,其餘選項都有反例可破。
逐選項分析
A✕ 陷阱
宣告物件時即會呼叫建構子,例如 `MyClass obj;` 直接在 stack 上建立物件,不必用 new。new 只是動態配置在 heap 的方式之一。
B✕
C++ 支援建構子多載(overloading),一個類別可以有多個建構子,只要參數列不同即可,例如預設建構子、複製建構子、帶參數建構子並存。
C✓ 正確
建構子的定義就是『與類別同名且無回傳型別的特殊成員函式』,名稱必須與類別名稱完全一致,編譯器才會識別為建構子。
D✕ 陷阱
建構子可視性可為 public、protected 或 private。private 建構子常用於 Singleton 模式,阻止外部直接建立物件,可見並非一定要 public。
C++ 建構子五大特性
| 特性 | 說明 | 常見陷阱 |
|---|
| 名稱 | 與類別名稱完全相同 | 大小寫也要一致 |
| 回傳值 | 無回傳型別(連 void 都不寫) | 誤以為要寫 void |
| 多載 | 可有多個建構子 | 誤以為只能一個 |
| 呼叫 | 建立物件時自動呼叫 | 以為一定要 new |
| 存取 | public/protected/private 皆可 | 以為只能 public |
A、D 都用了「一定要」這種絕對化用詞,考選部最愛用這種誇大修飾詞設陷阱。C++ 建構子在使用時機與可視性上都很彈性,看到「一定要」先警覺八成是錯的。