# Homework 02 ###### tags: `Homework` > 這份作業主要由國立臺北科技大學 109 資工系黃漢軒所命題,若有任何的問題,非常歡迎使用以下的聯絡方式提問: > > Email: t10950031@ntut.org.tw/MS Teams: 黃漢軒/Telegram: @xuan910625 ⚠️ Due: 11:59 p.m., dd / MM / yyyy ⚠️ ## 作業目標 這份作業主要希望你能夠熟悉以下的事項,以利於跟進未來課程的發展: - [x] 瞭解如何使用 Git(嘗試加入檔案與增加版本) - [x] 瞭解 Class 的使用方式 - [x] 瞭解 STL 的使用方式 - [x] 瞭解如何撰寫 Google Tests - [x] 瞭解環境相關建設 ## 檔案架構 請確認提交是否符合以下的檔案架構,否則無法進行評分。 ``` . │ .clang-format │ .gitignore │ CMakeLists.txt │ files.cmake │ LICENSE │ README.md │ ├───include │ storage.hpp │ ├───scripts │ CodeCoverage.cmake │ coverage.sh │ ├───src │ storage.cpp │ └───test ut_storage.cpp ``` ## 題目敘述 > 在這個任務中,你將描述 Uriah 的糧食庫 `Storage`。 Uriah 住在中山區的一間小雅房,身為一個平日不是在朝九晚六實習,不然就是在努力精煉自己能力的資工大四生,每天凌晨夜深人靜的小確幸,不外乎就是打開糧食庫並拿點東西吃,接著繼續忙。 Uriah 的糧食庫可能有許多點心,例如:泡麵、餅乾、御飯糰、冰7林、*飛天義大利麵*、*新生高架橋*、*大直河濱公園的河水*、*長春松江路口的公車站*、*捷運行天宮站*等等,這些多樣性的糧食能夠有助於 Uriah 在吃完這些點心後充足了一些精力並繼續忙手邊的事情。 給你一個糧食庫 `Storage` 類別,在這個 `Storage` 類別中,你應該要將這些零食藉由建構子初始化,並且實作多個函式來取得這個糧食庫的屬性,例如:當點心被加入這個糧食庫時,我們在糧食庫中分配一個位置給這個點心,我們希望這個糧食庫可以取得特定位置的點心、可重新擺放點心至特定位置、且當點心被吃掉時該位置依然保留,並且希望可以取得該糧食庫目前的長度為何。 由於 Uriah 半夜如果發現糧食庫壞掉了,會把你這次的功課分數當作零食吃掉,為了避免這件事情發生,你還必須寫單元測試來防止這個糧食庫壞掉。如果你將糧食庫設計好,給了 Uriah 非常好糧食庫,它將會覺得非常開心並在這次功課給了你全部的分數,如果沒有的話,它會非常飢餓並把你的分數按照比例吃掉,所以請務必完成以下的子任務。 ## 任務敘述 ### 第一部分:完成 `Storage` 類別,使類別包含以下的成員。 - `std::vector<std::string> storage` - 用於儲存點心的一個 vector。 - 見 [cplusplus - vector](https://cplusplus.com/reference/vector/vector/) 來更加瞭解 `std::vector`。 ### 第二部分:完成 `Storage` 類別,使類別包含以下的建構子。 - `Storage::Storage(int n, std::string snacks[])` - 用於初始化 `storage`,傳入陣列長度與字串陣列。 - `Storage::Storage(std::vector<std::string> snacks)` - 用於初始化 `storage`,傳入一個 vector。 ### 第三部分:完成 `Storage` 類別,使類別包含以下的函式。 - `void Storage::Add(std::string snack)` - 用於新增一個新的點心至 `storage`。 - `void Storage::Set(size_t index, std::string snack)` - 用於設定一個新的點心至 `index` 的位置上,其中 `index` 從 `0` 開始。 - 如果 `index` 大於 `storage` 的長度,則不做任何動作(Cancellation)。 - `std::string Storage::Get(size_t index)` - 用於取得在 `index` 位置上的點心。 - 如果該位置的點心不存在,或者 `index` 大於 `storage` 的長度,則回傳空字串。 - `void Storage::Eat(size_t index)` - 用於吃掉在 `index` 位置上的點心。 - 將該位置的點心設為空字串。 - 如果 `index` 大於 `storage` 的長度,則不做任何動作(Cancellation)。 - `size_t Storage::Size()` - 取得這個 `storage` 長度有多大。 ### 第四部分:撰寫測試,並確認類別中的所有函式都能夠被測試到。 - 你可以從以下幾個點去考慮如何測試你的 Storage 是好的: - 撰寫測試,使用建構子來建立物件,並確定初始化進去的點心數量是正確的。 - 撰寫測試,建立物件後,取得特定位置的點心。 - 諸如此類,思考如何測試比較好 :D - 如果你還不熟悉怎麼撰寫測試,你可以查看 `test/ut_storage.cpp` 來取得測試範例。 ### 第五部分:在 Jenkins 上取得兩個 Job 的綠色勾勾。 - 在 [jenkins.is1ab.com](http://jenkins.is1ab.com) 通過助教的隱藏測試並取得兩個綠色勾勾。 ## 作業迷因  
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up