C C class和struct有什麼區別?

2021-06-17 20:51:52 字數 1764 閱讀 7298

c/c++面試題:class和struct有什麼區別?

考點:class和struct的區別

出現頻率:☆☆☆☆

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

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

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

在第一種情況下,struct與class有著非常明顯的區別。c是一種過程化的語言,struct只是作為一種複雜資料型別定義,

struct中只能定義成員變數,不能定義成員函式。例如下面的c**片斷:

structpoint ;

}9  ;

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

#include

usingnamespace std;

classcpoint

public:

cpoint(intx, int y) 

//建構函式,指定為public

voidprint1() //public

};structspoint

spoint(intx, int y) 

//建構函式,預設為public

private:

voidprint1() 

//private型別的成員函式

};intmain(void)

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

main函式內的編譯錯誤全部是因為訪問private成員而產生的。因此我們可以看到

class中預設的成員訪問許可權是private的,而struct中則是public的。在類的繼承方式上,struct和class又有什麼區別?請看下面的程式:

#include

usingnamespace std;

classcbase

}; classcderived1 : cbase 

//預設private繼承 ;

classcderived2 : public cbase 

//指定public繼承 ;

structsderived1 : cbase 

//預設public繼承 ;

structsderived2 : privatecbase 

//指定public繼承 ;

intmain()

可以看到,以private方式繼承父類的子類物件不能訪問父類的public成員。class

繼承預設是private繼承,而struct繼承預設是public繼承。

另外,在c++模板中,型別引數前面可以使用class或typename,如果使用struct,則含義不同,struct後面跟的是「non-typetemplate parameter」,而class或typename後面跟的是型別引數。

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

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

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

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

struct 和class到底有什麼區別

我們知道struct是c語言的寵兒,當需要乙個複雜型別的時候就需要定義乙個struct 比如乙個學生結構體,含有三個屬性,分別是編號 名字和年齡。1 typedef struct student 2 當我們用乙個鍊錶將他們存起來,即指標指向struct,然後便可以對所有學生進行檢視 刪除 修改和增加...

struct和typedef struct的區別

1 在c中定義乙個結構體型別要用typedef typedef struct student stu 於是在宣告變數的時候就可 stu stu1 如果沒有typedef就必須用struct student stu1 來宣告 這裡的stu實際上就是struct student的別名。stu struc...

struct和typedef struct的區別

1.基本解釋 typedef為c語言的關鍵字,作用是為一種資料型別定義乙個新名字。這裡的資料型別包括內部資料型別 int,char等 和自定義的資料型別 struct等 在程式設計中使用typedef目的一般有兩個,乙個是給變數乙個易記且意義明確的新名字,另乙個是簡化一些比較複雜的型別宣告。至於ty...