C 中struct與class的區別

2022-05-02 09:54:07 字數 1357 閱讀 9960

**:

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

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

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

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,此處不可訪問

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

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,使**可讀性更強。

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

template

class

tvalue

t get(

void )

};

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

C 中class與struct的區別

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

C 中class與struct的區別

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

C 中struct與class的區別

1。字面上的區別 在字面上struct是structure的縮寫,通常叫做 結構體 在c語言裡用於將多種資料 多個變數組織在一起,便於表達比較複雜的資料型別,在c 中為了相容c語言保留了該關鍵字,並且保留了c語言中的所有功能。雖然在字面上struct與class的含義不一樣,但在c 中其功能基本是相...