練習筆記#Class 和 Struct的比較
最近看了ㄧ些面試常被問到的題目,例如:Class 和 Struct的比較或是能否說出它們的優缺點各是什麼。順便再來複習一下。
Struct : ( 是Value Type)
優點:Struct用來儲存較簡單的資料。
用途:
- 用來建立較為簡單的數據結構,可能包含少量屬性。
- 適合表示較小的數據單元,如坐標、日期、色彩等。
特點:
- 不支援繼承,無法擴展其功能。
- 是值型別,被分配到變數或傳遞給函數時,實際上是傳遞了該實例的副本。
適用情境:
當你僅需表示一個數據結構,或是希望避免引用語意和記憶體管理問題時,通常使用結構。
在這個例子中,我們定義了一個名為 Mazda
的 struct
,它有兩個屬性 year
和 color
。然後我們建立了兩個 Mazda
實例 Mazda3
和 Mazda6
,並將 Mazda6
指派給 Mazda3
的值。
由於 struct
是Value Type,在指派 Mazda6 = Mazda3
時,Mazda6
會得到 Mazda3
的一個全新複製值,而不是引用。
接下來,我們將 Mazda3
的 year
屬性改為 2023。由於 Mazda3
和 Mazda6
現在是兩個獨立的實例,所以改變 Mazda3
的值不會影響 Mazda6
。
因此,輸出結果會是:
Mazda3.year
會輸出 2023,因為我們剛剛修改過它的值。 Mazda6.year
會輸出 2019,因為它是從原始 Mazda3
複製過來的值,並未受到修改的影響。
這展示了 struct
作為Value Type,在複製和指派時會建立全新實例的行為,與Reference Type class
不同。
Class : (是Reference Type)
優點:用來儲存較複雜的資料與
用途:
- 用來建立較為複雜的物件,可能包含多個屬性和方法。
- 適合表示具有共享狀態或功能的實體,例如用戶、汽車、動物等。
特點:
- 支援繼承,子類可以擴展和修改父類的行為。
- 是引用型別,被分配到變數或傳遞給函數時,實際上是傳遞了對該實例的引用。
適用情境:
- 當你需要建立一個有屬性和方法的物件,並且這些物件需要被多處使用時,通常使用類。
- 定義了一個名為
Mazda
的class
。 - 創建了兩個
Mazda
實例mazda3
和mazda6
,並將mazda6
指派給mazda3
。 - 由於
class
是Reference Type,在指派mazda6 = mazda3
時,mazda6
和mazda3
都引用了同一個實例,而不是建立新的複製。 - 當我們將
mazda3
的year
屬性改為 2023 時,由於mazda3
和mazda6
引用同一個實例,因此改變會影響到兩者。 - 最後,我們分別打印
mazda3.year
和mazda6.year
。
因此,輸出結果會是:
mazda3.year
和 mazda6.year
都會輸出 2023,因為它們引用的是同一個實例,且該實例的 year
屬性已被修改為 2023。因為Class 有繼承的特性,子類可以擴展和修改父類的行為。
這展示了 class
作為Reference Type,在指派時不會建立新的實例副本,而是共享同一個實例的行為,與Value Type 的struct
不同。
總結:
如果你需要建立具有較複雜行為和功能的實體,並且可能需要在不同地方共享這些實體,Class可能是更好的選擇。而如果你僅需表示較簡單的數據結構,且不需要繼承和共享行為,Struct 可能更合適。
也可請AI 幫忙做成表格來看比較好懂及清楚。
ReferenceType
EX: Class、Closure、Function
Value type
Struct、Tuple、Enum、Array、Int、 Float、 Double、 String