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

對於下列C++程式碼之輸出,那些敘述為正確?電腦軟體設計(C++) 乙級 C++ 第 142 題 題目 第一張圖片 電腦軟體設計(C++) 乙級 C++ 第 142 題 題目 第二張圖片 電腦軟體設計(C++) 乙級 C++ 第 142 題 題目 第三張圖片 電腦軟體設計(C++) 乙級 C++ 第 142 題 題目 第四張圖片

電腦軟體設計(C++) · 乙級 · C++ · Q142

難易度分析

4 / 5

本題要求分析多個類別在不同賦值情境下的記憶體行為,並對多組輸出結果進行正確性判別。由於涉及自定義運算子與預設成員複製之差異,且採複選形式,需完整分析所有選項,故難度較高。

正確答案 (複選):①, ④

  • ① 甲輸出1,乙輸出10:甲輸出 1:`c1=*p1` 呼叫 C1 的自訂 operator= 執行深層複製,將 `p1->d1[0]=1` 的值複製到 `c1.d1[0]`,故輸出 1。乙輸出 10:`c2=*p2` 使用預設複製指派,C2 的 `d2` 為陣列成員,預設行為會逐元素複製,故 `c2.d2[0]=10`,輸出 10。
  • ④ 丙輸出1,丁輸出10:丙輸出 1:C1 的 operator= 進行深層複製(`d1=new int[10]` 配置新記憶體),`c1.d1[0]` 不受 `p1->d1[0]=102` 影響。丁輸出 10:C2 的 `d2` 為固定大小陣列成員,預設複製指派執行逐元素值複製,`c2.d2[0]` 不受 `p2->d2[0]=202` 影響。

錯誤選項解析

  • ② 丙輸出1,丁輸出202:丙應輸出 1 而非 102:因 C1 的 operator= 執行深層複製,`c1.d1` 與 `p1->d1` 指向不同記憶體區塊,後續 `p1->d1[0]=102` 不影響 `c1.d1[0]`。丁應輸出 10 而非 202:C2 的 `d2` 是陣列成員,預設複製指派會產生獨立副本,`p2->d2[0]=202` 不影響 `c2.d2[0]`。
  • ③ 丙輸出102,丁輸出10:丙應輸出 1 而非 102:理由同上,深層複製確保 `c1` 擁有獨立記憶體,不受 `p1` 後續修改影響。丁應輸出 10 而非 10:此選項丁的值正確但丙錯誤,C2 的陣列成員預設複製產生獨立副本,`c2.d2[0]` 維持原值 10。
Learning Tip

"本題核心考點為 深層複製(Deep Copy) 與 淺層複製(Shallow Copy) 的差異。C1 類別自訂了 operator= 並使用 `new` 配置獨立記憶體,屬於深層複製;C2 類別的 `d2` 為陣列成員,預設複製指派會自動逐元素複製,效果等同深層複製。常考陷阱:若 C1 未自訂 operator=,預設行為會複製指標值(淺層複製),導致 `c1.d1` 與 `p1->d1` 指向同一記憶體,此時修改 `p1->d1[0]` 會影響 `c1.d1[0]`。實務上,指標成員必須手實作深層複製以避免 Double Free 與 Dangling Pointer 問題。"

學員答題分佈

①甲輸出1,乙輸出100%
②丙輸出1,丁輸出2020%
③丙輸出102,丁輸出100%
④丙輸出1,丁輸出100%

此答題分佈是根據學員在 LongePass 模擬考等實際作答紀錄計算而成。與考友分享這道歷屆試題與詳細解析!

相似類型題目