C 中sturct和class的區別

2021-06-26 08:48:26 字數 1314 閱讀 3133

1。 字面上的區別

在字面上struct是structure的縮寫,通常叫做「結構體」,在c語言裡用於將多種資料、多個變數組織在一起,便於表達比較複雜的資料型別,在c++中為了相容c語言保留了該關鍵字,並且保留了c語言中的所有功能。

雖然在字面上struct與class的含義不一樣,但在c++中其功能基本是相同的,c++中的struct不僅可以包含資料成員,而且與class一樣支援新增的物件導向特性,僅在以下細節上有略微差別。

既然兩者在字面上不一樣,為了更好地利用這一點,建議在c++中使用struct時仍然只使用c中的特性,來表示一些複雜的資料而不進行方法的封裝,這樣還可以提高軟體的可讀性。

2. 預設成員許可權區別

struct的成員預設許可權是public,而class的成員預設許可權是private。例如:

struct sb };

struct sc : sb;

class cb };

class cc1 : public sb;

class cc2 : sb;

sb.f(); // 合法

cb.f(); // 不合法,因為在cb類中f( )函式預設為private,此處不可訪問

建議在工程**中顯示宣告成員的許可權,而有使用預設許可權,因為並不是所有人都知道這一點。

3. 預設繼承方式

struct的預設繼承方式為public,而class的預設繼承為private,例如:

sc sc; cc1 cc1; cc2 cc2;

sc.f(); // 合法

cc1.f(); // 合法,因為cc1顯示地使用public繼承

cc2.f(); // 不合法,cc2預設private繼承自sb,在cc2中f( )為private

在c語言中struct不可以繼承,雖然我們知道在c++中struct可以繼承,但在實際使用中,在不需要繼承的場合我們使用struct,而在需要繼承的場合使用class,這樣更貼近其字面意思,使程式有更好的可讀性。

雖然知道class的預設繼承為private,但並不是專案組的每個人都清楚這一點,建議在工程**中不省略private,使**可讀性更強。

4. 用於定義模板引數

模板為c++語言新增特性,c語言沒有,只有class可用於定義引數,而struct不可以,例如:

template

class tvalue

t get( void )

};此處只能使用class,不能使用struct。當然,此處還可以使用typename代替class,class與typename也僅在定義模板引數時可以互換,而且建議此時使用typename,因為這樣讀起來更接近人類語言,更具有可讀性。

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許可權。...