本單元重點回顧
結構體=自己定義的資料型態:把同一個東西的多個欄位綁成一包,每個欄位有自己的名字——平行陣列的「散裝資料」從此絕跡。
定義語法:
struct 名稱 { 成員; };——結尾分號必加。成員型態不限,定義放 main 外面。用起來跟內建型態一樣:宣告變數、開陣列、
.存取成員、當參數傳、塞進 vector;還能用=整包賦值(陣列成員也一起複製)——這點跟 vector 同一陣線。大括號初始化:照成員宣告的順序填,沒給到的自動補零——上冊 6.5 的老規則在新型態上重演。
成員函式:把「這包資料自己的事」收進型態裡;函式內直接寫成員名,動的就是呼叫者自己的成員。
建構子:與型態同名、無回傳型態,變數誕生的瞬間自動執行;可以有多個,按參數挑選。寫了任何建構子,編譯器送的預設建構子就收回——
Fraction f;要能用,得自己留一條無參數的路。operator <:11.6 的比較函式搬進結構體——語意不變(「自己是否必須排在 b 前面」)、參數少一個(左邊是自己)、兩個const都帶上;多載後sort(a, a + n)免第三參數,max/min也跟著能用。鐵則不因換裝而失效:相等必須回傳
false——用<、>,別用<=、>=,違反就是 UB。(延伸)
>>/<<多載:寫成結構體外的普通函式(左邊是 stream,塞不進成員函式);stream 傳參考、記得return,連鎖讀寫與while (cin >> f)都自動成立。pair 還是結構體:兩個值+字典序+用完即丟選 pair;欄位多、要自訂比較、要活得久選結構體——猶豫時選結構體。