srtuct 和 class的區別

2021-07-25 12:35:16 字數 1337 閱讀 4585

目錄(?)

[+]

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,因為這樣讀起來更接近人類語言,更具有可讀性。

struct和class的區別

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

ID和CLASS的區別

在編寫外部css過程中,經常會會用到id與class屬性,即使用點號 建立class選擇器,使用hash符號 建立id選擇器。id是不能重複的,所以在xhtml的結構中,大結構一定是用id。比如標誌 導航 主體內容 版權。id需要具有唯一性,並且盡量在外圍使用。而class具有可重複性,並且盡量在結...

class和struct的區別

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