類和結構的區別

2022-05-21 08:00:51 字數 676 閱讀 9652

結構與類很相似,都表示可以包含資料成員和函式成員的資料結構。與類不同的是,結構是值型別並且不需要堆分配。結構型別的變數直接包含結構的資料,而類型別的變數包含對資料的引用(該變數稱為物件)。 struct 型別適合表示如點、矩形和顏色這樣的輕量物件。儘管可能將乙個點表示為類,但結構在某些方案中更有效。在一些情況下,結構的成本較低。例如,如果宣告乙個含有 1000 個點物件的陣列,則將為引用每個物件分配附加的記憶體。結構可以宣告建構函式,但它們必須帶引數。宣告結構的預設(無引數)建構函式是錯誤的。總是提供預設建構函式以將結構成員初始化為它們的預設值。在結構中初始化例項欄位是錯誤的。在類中,必須初始化例項物件. 使用 new 運算子建立結構物件時,將建立該結構物件,並且呼叫適當的建構函式。與類不同的是,結構的例項化可以不使用 new 運算子。如果不使用 new,那麼在初始化所有字段之前,欄位將保持未賦值狀態且物件不可用。對於結構,不像類那樣存在繼承。乙個結構不能從另乙個結構或類繼承,而且不能作為乙個類的基。但是,結構從基類 object 繼承。

結構可實現介面,其方式同類完全一樣。

乙個是值型別(結構),乙個是引用型別(類),結構在傳遞的時候如果沒有指定ref,則傳遞的是記憶體中的一分副本,而class則是傳遞對他的引用。

類在堆中,結構在棧中,類傳遞的是類在堆中的位址,而結構是在棧中另複製了乙個傳遞,你改變傳遞過來的結構不會影響原結構。而類是引用,共用一塊記憶體,會改變堆中類的內容. 

類和結構的區別?

類 類是引用型別在堆上分配,類的例項進行賦值只是複製了引用,都指向同一段實際物件分配的記憶體 類有構造和析構函式 類可以繼承和被繼承 結構 結構是值型別在棧上分配 雖然棧的訪問速度比較堆要快,但棧的資源有限放 結構的賦值將分配產生乙個新的物件。結構沒有建構函式,但可以新增。結構沒有析構函式 結構不可...

類和結構的區別

結構在以下幾個重要方面與類不同 結構是值型別 參見11.3.1小節 所有結構型別都隱式地繼承自類system.valuetype 參見11.3.2小節 對結構型別的變數進行賦值,將建立所賦的值的乙個 副本 參見11.3.3小節 結構的預設值的生成方式為 將所有值型別的域設定為它們的預設值,並將所有引...

結構和類的區別

類是引用型別,是儲存在託管堆中的。通過定義類,我們可以在資料的生存期上得到很高的靈活性,但是也會讓程式的效能有一定的損失。雖然這種損失很小,但當我們只需要定義乙個很小的結構時,用類來定義就有些浪費,對於這樣的問題,c 有相對應的方案來解決,那就是 結構 struct 結構與類的區別 1 結構是值型別...