C和C 中的結構體

2021-10-07 06:20:10 字數 1892 閱讀 4094

c/c++結構體的區別 

c中的結構體和c++中結構體的不同之處:在c中的結構體只能自定義資料型別,結構體中不允許有函式,而c++中的結構體可以加入成員函式。

c++中的結構體和類的異同:

一、相同之處:結構體中可以包含函式;也可以定義public、private、protected資料成員;定義了結構體之後,可以用結構體名來建立物件。但c中的結構體不允許有函式;

也就是說在c++當中,結構體中可以有成員變數,可以有成員函式,可以從別的類繼承,也可以被別的類繼承,可以有虛函式。

二、不同之處:結構體定義中預設情況下的成員是public,而類定義中的預設情況下的成員是private的。類中的非static成員函式有this指標,(而struct中沒有是錯誤的,一直被誤導啊,經過測試struct的成員函式一樣具有this指標),類的關鍵字class能作為template模板的關鍵字 即templateclass a{}; 而struct不可以。

實際上,c中的結構體只涉及到資料結構,而不涉及到演算法,也就是說在c中資料結構和演算法是分離的,而到c++中一類或者乙個結構體可以包含函式(這個函式在c++我們通常中稱為成員函式),c++中的結構體和類體現了資料結構和演算法的結合。

1.c的結構體和c++結構體的區別

1.1 c的結構體內不允許有函式存在,c++允許有內部成員函式,且允許該函式是虛函式。所以c的結構體是沒有建構函式、析構函式、和this指標的。

1.2 c的結構體對內部成員變數的訪問許可權只能是public,而c++允許public,protected,private三種。

1.3 c語言的結構體是不可以繼承的,c++的結構體是可以從其他的結構體或者類繼承過來的。

以上都是表面的區別,實際區別就是面向過程物件導向程式設計思路的區別:

c的結構體只是把資料變數給包裹起來了,並不涉及演算法。

而c++是把資料變數及對這些資料變數的相關演算法給封裝起來,並且給對這些資料和類不同的訪問許可權。

c語言中是沒有類的概念的,但是c語言可以通過結構體內置立函式指標實現物件導向思想。

2.c++的結構體和c++類的區別

2.1 c++結構體內部成員變數及成員函式預設的訪問級別是public,而c++類的內部成員變數及成員函式的預設訪問級別是private。

2.2 c++結構體的繼承預設是public,而c++類的繼承預設是private。

在c++中,結構體是一種特殊形態的類。

結構體和類的唯一區別就是:  結構體和類具有不同的預設訪問控制屬性。

類中,對於未指定訪問控制屬性的成員,其訪問控制屬性為私有型別(private)

結構體中,對於未指定任何訪問控制屬性的成員,其訪問控制屬性為公有型別(public)

c++中,不使用結構體絲毫不會影響程式的表達能力。c++之所以要引入結構體,是為了保持和c程式的相容性。

但有時仍會在c++中使用結構體,是因為,可以使用結構體將不同型別資料組成整體,方便於儲存資料。(若用類來儲存,因類中成員預設為私有,還要為每個資料成員特定函式來讀取和改寫各個屬性,比較麻煩。)

c語言中結構體不允許定義函式成員,且沒有訪問控制屬性的概念。

c++為c語言中的結構體引入了成員函式、訪問控制許可權、繼承、包含多型等物件導向特性。

c++在struct之外引入了class關鍵字,但為了保持與c程式的相容,c++保留了struct關鍵字,並規定結構體預設訪問控制許可權為公有型別。

另外,c語言中,空結構體的大小為0,而c++中空結構體(屬於空類)的大小為1。

c++中空類的大小為1的原因:

空類也可以例項化,類例項化出的每個物件都需要有不同的記憶體位址,為使每個物件在記憶體中的位址不同,所以在類中會加入乙個隱含的位元組。

C和C 中結構體的區別

總結一句話 c 中的結構除了預設是共有屬性外,計畫和類一樣,而c的結構體沒有 對比c的結構體 c 的結構體 函式不允許有函式 允許有成員函式 1.允許有建構函式 析構函式和this指標 2.允許這個函式是虛函式 許可權訪問許可權只能是public c 允許public,private,protect...

C結構體 C 結構體 和 C 類的區別

c結構體 c 結構體基本相同,c 類主要是方法的實現。結構體是資料型別的集合 類是資料型別加方法的集合,基本如此,更注重方法。1.c的結構體和c 結構體的區別 1 c的結構體內不允許有函式存在,c 允許有內部成員函式,且允許該函式是虛函式。所以c的結構體是沒有建構函式 析構函式 和this指標的。2...

C 中的結構(結構體)

結構是可以包含資料成員和函式成員的資料結構,這一點和類一樣 下面我們講一下結構與類不同的地方 1.結構體是值型別,無需進行堆分配,類是引用型別 2.結構型別的變數直接儲存資料結構,而類型別的變數儲存對動態分配的物件的引用 3.類支援繼承,結構體不支援繼承 4.關鍵字簡單說下,類是class,結構體是...