由於自己是直接系統學習的c++,所以對struct的用法還是很模糊,感覺它就是不如class,但是具體有哪些不同,除了知道預設訪問許可權不同,就不知道別的,所以還是有必要總結一番。
1、c和c++中struct的區別
c中的struct沒有成員函式,僅僅是資料的結合,而c++中的struct是對c中的struct進行了擴充,所以增加了很多功能,可以說跟class已經有很多相似之處。且在c中使用結構體時需要加上struct,或者對結構體使用typedef取別名,而c++可直接使用。
//結構體宣告,c和c++使用同乙個
struct student
typedef
struct student student2;//c中取別名
struct student stu1;
//c中正常使用
student2 stu2;
//c中通過取別名的使用
student stu3;
//c++中使用
由於c和c++語言的特點,在c中結構體就是不同型別資料的集合,並不涉及演算法和操作,而c++是把資料變數及對這些資料變數的相關演算法和操作給封裝起來。
2、c++中struct和class的區別
a. struct預設的訪問屬性是public,而class預設的訪問屬性是private。
struct a
;class b
;int
main()
b. 在繼承關係中,struct預設是public的,而class是private,不過不建議這樣寫,一般都是寫明繼承的方式。
struct a
;struct b : a
;class b : public a;
struct b : public a;
intmain()
c. class這個關鍵字還可用於定義模板引數,就像typename,但是strcut不用與定義模板引數。
template
//可以把typename換成class
intfunc
(const t& t,
const y& y )
d. 賦初值問題,c中對struct賦初值可以用{}的形式,而在c++中的class則不行,需要呼叫建構函式。(所以說,加入乙個建構函式或是乙個虛函式會使strcut更體現出一種物件的特性)
struct a
;a a =
;//定義時賦初值,在struct時沒問題,在class時出錯
e.例項化的class儲存在堆中,而struct儲存在棧內,struct的執行效率相對較高。
總結:什麼時候用struct,什麼時候用class呢?
如果更像是一種資料結構集合的話,那麼用struct(比如乙個基函式,裡面只需要幾個變數的那種),如果你要做的更像是一種物件的話,那麼用class(裡面涉及到成員變數、建構函式、析構函式等)。
C struct和class的比較
什麼是class?class是我們通常所說的類,是物件導向程式設計的基本概念,一種可以自定義的資料結構型別,c 中的class 通常包含字段 屬性 方法 建構函式 索引器 操作符等等。在.net中,所有的類都最終繼承自system.object類,因此是一種引用型別,也就是說,new乙個類的例項時,...
C struct和class的比較
什麼是class?c 中的class 通常包含字段 屬性 方法 建構函式 索引器 操作符等等。在.net中,所有的類都最終繼承自system.object類,因此是一種引用型別,也就是說,new乙個類的例項時,例項的值儲存在託管堆 managed heap 中,而類的例項在堆疊 stack 上存放的...
C struct和class的區別
在c 中我們可以看到struct和class的區別並不是很大,兩者之間有很大的相似性。那麼為什麼還要保留struct,這是因為c 是向下相容的,因此c 中保留了很多c的東西。struct a 注意 因為struct是一種資料型別,那麼就肯定不能定義函式,所以在面向c的過程中,struct不能包含任何...