C 中Class和Struct的區別

2022-04-19 14:09:14 字數 1832 閱讀 7390

class

struct

本質

繼承與system.object,是引用型別。

其實例分配在堆上。

其實例可以設為null。

作為引數時,按址方式傳遞。

可以宣告析構函式,因為其實例由垃圾**機制來確保記憶體**。

繼承自system.valuetype,是值型別。

其實例分配在棧上。(效能優勢)

其實例不可以設為null。

作為引數時,按值方式傳遞。

不可以宣告析構函式,因為使用完後立即自動解除記憶體分配。

建構函式

可以顯示宣告無引數的建構函式。

不需要在建構函式中初始化全部字段。

不可以顯示宣告無引數的建構函式,只能宣告有引數的建構函式。預設無參構造器只是簡單地把所有的值初始它的的0等價值。

建構函式必須初始化所有字段。

成員

可以對成員進行初始化。

不可以對成員進行初始化。

例項化

使用new關鍵字。

可以不使用new關鍵字。對於struct如果是例項無參的時就可以無new了;但如果是有參的建構函式生成時,就要用new了。如果不以new來例項化struct,則其所有的字段將處於未分配狀態,直到所有字段完成初始化,否則引用未賦值的字段會導致編譯錯誤。

繼承

可以繼承類和介面。(擴充套件優勢)

不能從類繼承,也不能作為類的基類,但是可以繼承介面。

抽象

可以是抽象類,並可宣告抽象函式。

不支援抽象。

過載

可以宣告protected成員、virtual成員、sealed成員和override成員。

只可以過載system.object的3個虛方法,equals()、tostring()、gethashtable()。

職能

是行為的封裝,用來表述物件。

是資料的封裝,用於儲存資料。

1

struct

fenshu212

13//

14//

fenshu(int fm)

15//

1819

//need to mark the constructor as public (or internal).

20internal fenshu(int

fm)2125}

2627

class

program28/

", fs.fenzi, fs.fenmu);

3536

fenshu f;

37 f.fenzi = 1

;38 f.fenmu = 2

;39 console.writeline("/"

, f.fenzi, f.fenmu);

4041 fenshu s = new fenshu(2

);42 console.writeline("/"

, s.fenzi, s.fenmu);43}

44 }

reference:

addition:

列舉是值型別而system.enum卻是引用型別的原因

C 中struct和class的差別

在c 中,struct和class除了預設訪問控制級別不一樣,其它別無二致,具體怎麼用,純屬於個人習慣。另 在stroustrup c 發明者 的原作中 他自己說的原句是 按照定義,乙個struct就是乙個類,而只是完全公開的類 所以 struct s 等價於class s public 也就是說,...

c 中struct和class的區別

有這麼幾點不同 1.struct 是值型別,class是物件型別 2.struct 不能被繼承,class可以被繼承 3.struct 預設的訪問許可權是public,而class預設的訪問許可權是private.4.struct不能由程式設計師申明建構函式,即使是預設 不帶引數 的建構函式,同樣也...

C 中 struct 和 class 的區別

從語法上,class和struct做型別定義時只有兩點區別 一 預設繼承許可權。如果不明確指定,來自class的繼承按照private繼承處理,來自struct的繼承按照public繼承處理 二 成員的預設訪問許可權。class的成員預設是private許可權,struct預設是public許可權。...