本單元重點回顧

  1. 結構體=自己定義的資料型態:把同一個東西的多個欄位綁成一包,每個欄位有自己的名字——平行陣列的「散裝資料」從此絕跡。

  2. 定義語法struct 名稱 { 成員; };——結尾分號必加。成員型態不限,定義放 main 外面。

  3. 用起來跟內建型態一樣:宣告變數、開陣列、. 存取成員、當參數傳、塞進 vector;還能用 = 整包賦值(陣列成員也一起複製)——這點跟 vector 同一陣線。

  4. 大括號初始化:照成員宣告的順序填,沒給到的自動補零——上冊 6.5 的老規則在新型態上重演。

  5. 成員函式:把「這包資料自己的事」收進型態裡;函式內直接寫成員名,動的就是呼叫者自己的成員。

  6. 建構子:與型態同名、無回傳型態,變數誕生的瞬間自動執行;可以有多個,按參數挑選。寫了任何建構子,編譯器送的預設建構子就收回——Fraction f; 要能用,得自己留一條無參數的路。

  7. operator <11.6 的比較函式搬進結構體——語意不變(「自己是否必須排在 b 前面」)、參數少一個(左邊是自己)、兩個 const 都帶上;多載後 sort(a, a + n) 免第三參數,maxmin 也跟著能用。

  8. 鐵則不因換裝而失效:相等必須回傳 false——用 <>,別用 <=>=,違反就是 UB。

  9. (延伸)>><< 多載:寫成結構體外的普通函式(左邊是 stream,塞不進成員函式);stream 傳參考、記得 return,連鎖讀寫與 while (cin >> f) 都自動成立。

  10. pair 還是結構體:兩個值+字典序+用完即丟選 pair;欄位多、要自訂比較、要活得久選結構體——猶豫時選結構體。