# OOP 5/9 5/11 ## 5/9 ## 第一題 ![](https://hackmd.io/_uploads/SyZ9NxvP2.png) 答案為綠色 黃色意思是他如果可以雙向的話被稱為doubly linked list ## 第二題 ![](https://hackmd.io/_uploads/Hy1XIgDDn.png) 答案為綠色 黃色意思是C++標準函式庫已經幫你定義好一些資料結構, 可以直接用 ## 第三題 ![](https://hackmd.io/_uploads/HJy1PewPh.png) 答案為紅色 紅色linked list不會開連續記憶體空間 藍色c++要動態配置記憶體可以用 new and delete ## 第四題 ![](https://hackmd.io/_uploads/Bycfuevvh.png) ![](https://hackmd.io/_uploads/HJQbdxDP3.png) 答案為藍色 把head指向新的data,本來被指向的linked list就會memory leak 黃色afterMe作用是創一個新的node,然後linked list指向他 ## 第五題 ![](https://hackmd.io/_uploads/Hyq99eDPh.png) 答案為綠色 藍色linked list確實需要掃過每一個元素 ## 第六題 ![](https://hackmd.io/_uploads/H1kNolvP3.png) 答案為黃色 要存的資訊多,memory比較大 ## 第七題 ![](https://hackmd.io/_uploads/HJenixvv2.png) 答案為藍色 FILO ## 第一題 ![](https://hackmd.io/_uploads/S1RV2ewv2.png) 答案為綠色 因為getStackNum()有加static,所以就算還沒宣告該物件一樣可以存取 紅色因為有template,所以可接多種形態 藍色是因為在創建及刪除該種類物件時,需更動stackNum的值 ## 第二題 ![](https://hackmd.io/_uploads/SkPuZ-DPh.png) 答案為藍色 藍色,不保護=的回傳值並不會造成錯誤,compile還是會過 黃色只是宣告 static變數 不會錯 ## 第三題 ![](https://hackmd.io/_uploads/SJDbX-vw3.png) 答案為藍色 它只是一般的queue ## 第四題 ![](https://hackmd.io/_uploads/S12pXZDPh.png) 答案為黃色 不是random ## 第五題 ![](https://hackmd.io/_uploads/ryAGNWDwn.png) 答案為黃色 實作是用紅黑樹 紅色是因為set會去除重複元素 ## 第六題 ![](https://hackmd.io/_uploads/r1Gk8WPP3.png) 答案為黃色 用pointer需要知道 data strusture的底層,not elegant ## 第七題 ![](https://hackmd.io/_uploads/rJveu-PDh.png) ![](https://hackmd.io/_uploads/B1MWObPwh.png) 答案為藍色 都寫在main的for迴圈裡面了,不好改變成別的data structure ## 第一題 ![](https://hackmd.io/_uploads/Hkp6_ZPv3.png) ![](https://hackmd.io/_uploads/B1MWObPwh.png) 答案為紅色 這是for linked list的,其他不能用 enumeration:窮舉 ## 第二題 ![](https://hackmd.io/_uploads/ByCPobwvh.png) 答案為綠色 黃色有點不知道甚麼意思 ## 第三題 ![](https://hackmd.io/_uploads/rk7YRWwv2.png) 答案為黃色 Obviously ![](https://hackmd.io/_uploads/ryYhyfvD3.png) 基本上有這些common iterator ## 第四題 ![](https://hackmd.io/_uploads/SJuT-zvPh.png) 答案為綠色 push_back會更動到container的值,感覺不是iterator的工作範疇 黃色iterator可以隨機存取[] ## 第五題 ![](https://hackmd.io/_uploads/SyHnVfDPh.png) 答案為綠色 iterator如果沒定義++ --就不支援 ## 第六題 ![](https://hackmd.io/_uploads/rJr7HzPD2.png) 答案為紅色 他沒說是binary tree ## 第七題 ![](https://hackmd.io/_uploads/HJOLrMww3.png) 答案為黃色 all data public一定不會好 ## 5/11 ## 第一題 ![](https://hackmd.io/_uploads/ByFeifww3.png) 選黃色 解題思路: 使用者應該先專注在核心工作上,錯誤處理留給之後再做,故黃色錯了 ## 第二題 ![](https://hackmd.io/_uploads/Bkh9ofDPn.png) 選藍色 解題思路: 根本沒有rethrow這個用法,故藍色錯了 ![](https://hackmd.io/_uploads/H1xF0GPPh.png) ## 第三題 ![](https://hackmd.io/_uploads/HksenfvPh.png) 選綠色 解題思路: 都對 ## 第四題 ![](https://hackmd.io/_uploads/Bk_w2GPDh.png) 選綠色 解題思路: exception handleing不要隨便亂用,故紅色錯 在情況簡單的情況下,直接用if-else就好了,不須用到exception handleing,故藍色錯 exception handleing的其中一個核心概念便是用在不同函式中,故黃色錯了 ![](https://hackmd.io/_uploads/SyW5RGwP2.png) ## 第五題 ![](https://hackmd.io/_uploads/rJjBRGDvh.png) 選綠色 解題思路: 都對 ![](https://hackmd.io/_uploads/ry_uAzDwn.png) ## 第六題 ![](https://hackmd.io/_uploads/BJY20GvPh.png) 選黃色 解題絲路: exception handleing的概念是將主線城市與錯誤處理分開 ## 第六題 ![](https://hackmd.io/_uploads/BJY20GvPh.png) 選黃色 解題絲路: exception handleing的概念是將主線城市與錯誤處理分開 ## 第七題 ![](https://hackmd.io/_uploads/HJfKJmvD3.png) 選藍色 解題思路: there is a trap,只寫throw在compile時會過,但真的跑到這邊而且出錯時,會因為找不到exception而run error ## 第一題 ![](https://hackmd.io/_uploads/rkXwHNPv2.png) 選黃色 解題思路: 只會進到其中一個catch block處理錯誤情況,故黃色錯 ## 第二題 ![](https://hackmd.io/_uploads/HkuNDVvvn.png) 選藍色 解題思路: 發生錯誤情況時,不會再回到原本throw的地方 ## 第三題 ![](https://hackmd.io/_uploads/ByvvPVvv2.png) 選紅色 解題思路: catch block最多只能傳一個參數 ## 第四題 ![](https://hackmd.io/_uploads/BJLCvVwwn.png) 選藍色 解題思路: exception class甚至可以沒有宣告任何函式與變數,只要做為不同型態即可 ## 第五題 ![](https://hackmd.io/_uploads/B1J8YEww2.png) 選紅色 解題思路: 在一個try block中,可以寫超過一個throw exception_parameter(應該是指"throw") ![](https://hackmd.io/_uploads/HywkcEvw2.png) ## 第六題 ![](https://hackmd.io/_uploads/SkOQ5EDw2.png) 選黃色 解題思路: Default應該要放在最後面才對,如同switch一樣 ## 第七題 ![](https://hackmd.io/_uploads/ryc95EDvh.png) 選黃色 解題思路: 應該是"get to the catch block"才對 ## 第一題 ![](https://hackmd.io/_uploads/rklGoEPwn.png) 選綠色 解題思路: handle exceptions的應該是catch block ## 第二題 ![](https://hackmd.io/_uploads/B1H8iVPvn.png) 選黃色 解題思路: 列在throw list的是"可能會出現的錯誤情況",多寫沒關係 ![](https://hackmd.io/_uploads/BkOcjVvD3.png) ## 第三題 ![](https://hackmd.io/_uploads/Sy96sNvP3.png) 選紅色 解題思路: ![](https://hackmd.io/_uploads/SyxJ34Pw3.png) ## 第四題 ![](https://hackmd.io/_uploads/HJY3nNvwh.png) 選綠色 解題思路: throw list 語法只在C++ 14前有效(含) ## 第五題 ![](https://hackmd.io/_uploads/BkgtpNPw2.png) 選黃色 解題思路: since C++17才對 ## 第六題 ![](https://hackmd.io/_uploads/ryc06EPv2.png) 選紅色 解題思路: main() 呼叫f1(),f1呼叫f(),f() throw DBZ型態,被catch並輸出1; main() 呼叫f2(),f2(),f() throw DBZ型態,被catch並輸出5(因為AE繼承DBZ,故也屬於DBZ型態); ## 第七題 ![](https://hackmd.io/_uploads/ByHnAVwv3.png) 選藍色 throw-catch支援巢狀