c 中結構體和類的比較

2021-09-08 02:51:26 字數 955 閱讀 1381

前幾天,有位同學問我它們用起來有什麼區別,當時也不大清楚,糊弄過去了,但是,人不能自欺欺人,不能連自己的無知也要糊弄!

翻了下書,總結一下。

區別:結構是一種用關鍵字struct宣告的自定義資料型別。與類相似,也可以包含建構函式,常數,字段,方法,屬性,索引器,運算子和巢狀型別等,不過,結構是值型別。

1.結構的建構函式和類的建構函式不同。

a.結構不能包含顯式的無引數建構函式。結構成員講自動初始化為它們的預設值。

b.結構不能包含以下形式的初始值設定類:base(argument-list);

2.對於結構中的例項字段成員,不能在宣告時賦值初始化。

3.宣告了結構型別後,可以使用new運算子建立構造物件,也可以不使用new關鍵字。如果不使用new,那麼在初始化所有字段之前,欄位將保持未賦值狀態且物件不可用。

4.結構不支援繼承,即乙個結構不能從另乙個結構或類繼承,而且不能作為乙個類的基類。但是,結構從基類object繼承。結構也可以實現介面。

5.什麼時候用結構呢?結構使用簡單,並且很有用,但是要牢記:結構在堆疊中建立,是值型別,而類是引用型別。每當需要一種經常使用的型別,而且大多數情況下該型別只是一些資料時,使用結構能比使用類獲得更佳效能。

最後引用的「越過林子」的話:

結構是值型別,所以會影響效能,但根據使用結構的方式,這種影響可能是正面的,也可能是負面的。正面的影響是為結構分配記憶體時,速度非常快,因為它們將內 聯或者儲存在堆疊中。在結構超出了作用域被刪除時,速度也很快。另一方面,只要把結構作為引數來傳遞或者把乙個結構賦給另乙個結構(例如a=b,其中a和b是結構),結構的所有內容就被複製,而對於類,則只複製引用。這樣,就會有效能損失,根據結構的大小,效能損失也不同。注意,結構主要用於小的資料結構。但當把結構作為引數傳遞給方法時,就應把它作為ref引數傳遞,以避免效能損失——此時只傳遞了結構在記憶體中的位址,這樣傳遞速度就與在類中的傳遞速度一樣快了。另一方面,如果這樣做,就必須注意被呼叫的方法可以改變結構的值。

c 中結構體和類的區別

1.c的結構體和c 結構體的區別 1.1 c的結構體內不允許有函式存在,c 允許有內部成員函式,且允許該函式是虛函式。所以c的結構體是沒有建構函式 析構函式 和this指標的。1.2 c的結構體對內部成員變數的訪問許可權只能是public,而c 允許public,protected,private三...

C 中類和結構體的區別

c 結構體內部成員變數及成員函式預設的訪問級別是public,而c 類的內部成員變數及成員函式的預設訪問級別是private。c 結構體的繼承預設是public,而c 類的繼承預設是private,所以類在繼承的時候需要public 結構體 沒有預設的建構函式,但是可以新增建構函式 沒有析構函式 沒...

C 中結構體和類的區別

c 中結構型別和類型別在語法上非常相似,他們都是一種資料結構,都可以包括資料成員和方法成員。結構和類的區別 1 結構是值型別,它在棧中分配空間 而類是引用型別,它在堆中分配空間,棧中儲存的只是引用。2 結構型別直接儲存成員資料,讓其他類的資料位於堆中,位於棧中的變數儲存的是指向堆中資料物件的引用。c...