C 中struct與class的區別

2021-06-05 20:51:08 字數 1419 閱讀 1622

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 中class與struct的區別

類與結構的例項比較 類與結構的差別 如何選擇結構還是類 一 類與結構的示例比較 結構示例 類示例 呼叫過程 從上面的例子中我們可以看到,類的宣告和結構的宣告非常類似,只是限定符後面是 struct 還是 class 的區別,而且使用時,定義新的結構和定義新的類的方法也非常類似。那麼類和結構的具體區別...

C 中class與struct的區別

一 類與結構的示例比較 結構示例 類示例 呼叫過程 從上面的例子中我們可以看到,類的宣告和結構的宣告非常類似,只是限定符後面是 struct 還是 class 的區別,而且使用時,定義新的結構和定義新的類的方法也非常類似。那麼類和結構的具體區別是什麼呢?二 類與結構的差別 1.值型別與引用型別 結構...

C 中struct與class的區別

一.類與結構的差別1.值型別與引用型別 結構是值型別 值型別在堆疊上分配位址,所有的基型別都是結構型別,例如 int 對應system.int32 結構,string 對應 system.string 結構 通過使用結構可以建立更多的值型別類是引用型別 引用型別在堆上分配位址堆疊的執行效率要比堆的執...