這裡有兩種情況下的區別。
(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區別
這裡有兩種情況下的區別。1 c的struct與c 的class的區別。2 c 中的struct和class的區別。在第一種情況下,struct與class有著非常明顯的區別。c是一種過程化的語言,struct只是作為一種複雜資料型別定義,struct中只能定義成員變數,不能定義成員函式 在純粹的c語...
c與c 中struct的區別
在c語言中,不能直接用結構體名來宣告變數。在c 中,可以直接用結構體名來宣告變數。c語言 宣告 struct stu 定義 struct stu student c 宣告 struct stu 定義 1.struct stu student 2.stu student 如果想在c語言中直接用結構體名...
struct(在C與C 中的區別)
首先我承認沒有系統地學習過c 今天看到l的 我驚了下,struct怎麼搞得跟class有點相似,還有建構函式啊 查了下資料 struct關鍵字定義乙個結構體型別或乙個結構體型別的變數 具體內容點上面連線吧,我就寫幾點 樣例 struct1.cpp struct person family membe...