C C 中struct的區別

2021-07-02 12:07:14 字數 1682 閱讀 3724

這裡有兩種情況下的區別。

(1)c的struct與c++的class的區別。

(2)c++中的struct和class的區別。

在第一種情況下,struct與class有著非常明顯的區別。c是一種過程化的語言,struct只是作為一種複雜資料型別定義,struct中只能定義成員變數,不能定義成員函式(在純粹的c語言中,struct不能定義成員函式,只能定義變數)。例如下面的c**片斷:

struct point

;}9        ;

這裡第7行會出現編譯錯誤,提示如下的錯誤訊息:「函式不能作為point結構體的成員」。因此大家看到在第一種情況下struct只是一種資料型別,不能使用物件導向程式設計。

現在來看第二種情況。首先請看下面的**:

#include

using namespace std;

class cpoint

public:

cpoint(int x, int y)      //建構函式,指定為public

void print1() //public

};struct spoint

spoint(int x, int y)  //建構函式,預設為public

private:

void print1()      //private型別的成員函式

};int main(void)

在上面的程式裡,struct還有建構函式和成員函式,其實它還擁有class的其他特性,例如繼承、虛函式等。因此c++中的struct擴充了c的struct功能。那它們有什麼不同呢?

main函式內的編譯錯誤全部是因為訪問private成員而產生的。因此我們可以看到class中預設的成員訪問許可權是private的,而struct中則是public的。在類的繼承方式上,struct和class又有什麼區別?請看下面的程式:

#include

using namespace std;

class cbase

};class cderived1 : cbase        //預設private繼承

;class cderived2 : public cbase   //指定public繼承

;struct sderived1 : cbase        //預設public繼承

;struct sderived2 : private cbase  //指定public繼承

;int main()

可以看到,以private方式繼承父類的子類物件不能訪問父類的public成員。class繼承預設是private繼承,而struct繼承預設是public繼承。另外,在c++模板中,型別引數前面可以使用class或typename,如果使用struct,則含義不同,struct後面跟的是「non-type template parameter」,而class或typename後面跟的是型別引數。

事實上,c++中保留struct的關鍵字是為了使c++編譯器能夠相容c開發的程式。

答案:分以下所示兩種情況。

c的struct與c++的class的區別:struct只是作為一種複雜資料型別定義,不能用於物件導向程式設計。

c++中的struct和class的區別:對於成員訪問許可權以及繼承方式,class中預設的是private的,而struct中則是public的。class還可以用於表示模板型別,struct則不行。

c c 中的struct和class的區別

主要有兩種情況 1.c語言中的struct和c 中的class區別。2.c 中的struct和c 中的class的區別。下面分別介紹 1.c語言中的struct和c 中的class的區別 c語言中的struct只能定義成員變數,不能夠定義成員函式。如下所示 struct point 2.c 中的st...

C C 中的結構體 struct

什麼是結構體?簡單的來說,結構體就是乙個可以包含不同資料型別的乙個結構,它是一種可以自己定義的資料型別,它的特點和陣列主要有 兩點不同,首先結構體可以 在乙個結構中宣告不同的資料型別,第二相同結構的結構體變數是可以相互賦值的,而陣列是做不到的,因為陣列是單一資料型別的資料集合,它本身不是資料型別 而...

C C 程式設計 c 中的struct

c語言中 struct是使用者自定義資料型別 udt c 中struct是抽象資料型別 adt 支援成員函式的定義,c 中的struct能繼承,能實現多型 c 中,struct的成員預設訪問說明符為public 為了與c相容 class中的預設訪問限定符為private,struct增加了訪問許可權...