---
# System prepended metadata

title: OOP 5/9 5/11

---

# 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支援巢狀





