电竞比分网-中国电竞赛事及体育赛事平台

分享

Class和Struct的區(qū)別(整理一下)

 風雨篤行 2012-04-03

在c++中:

關于使用大括號初始化 
class和struct如果定義了構造函數(shù)的話,都不能用大括號進行初始化 
如果沒有定義構造函數(shù),struct可以用大括號初始化。 
如果沒有定義構造函數(shù),且所有成員變量全是public的話,可以用大括號初始化。

關于默認訪問權限 
class中默認的成員訪問權限是private的,而struct中則是public的。 
關于繼承方式 
class繼承默認是private繼承,而struct繼承默認是public繼承。

C中,結構不允許含有成員函數(shù),在c++中則允許含有成員函數(shù)

比較一下   C   語言的   struct   和   C++   的   struct   好了 
訪問權限: 
C:public   (沒有   private   訪問權限) 
C++:默認   public,可以用   protected/private   限制 
內(nèi)容: 
C:只有數(shù)據(jù) 
C++:可以有數(shù)據(jù)、成員函數(shù)、構造析構函數(shù),與   class   相同 
其它: 
C:除了存放數(shù)據(jù),沒有其它功能 
C++:可以與   class   參與繼承,可以重載操作符,可以有模板結構。。。 
使用: 
C:需要   struct   s   作為名稱聲明變量 
C++:struct   關鍵字在聲明變量的時候可選

C++中struct已經(jīng)被擴展,已經(jīng)不再是C時代的struct

那么C#中的struct 和C++里的區(qū)別在哪呢?

(*) struct的內(nèi)存分配不同 
C#: 在棧上分配 
c++: 在哪分配由程序員說了算,只有用new的時候才在堆上分配

說實話我對堆棧的區(qū)別也有些不清楚可以參考http://baike.baidu.com/view/93201.htm

stack:

由系統(tǒng)自動分配。 例如,聲明在函數(shù)中一個局部變量 int b; 系統(tǒng)自動在棧中為b開辟空間

heap:

需要程序員自己申請,并指明大小,在c中malloc函數(shù)

如p1 = (char *)malloc(10);

在C++中用new運算符

如p2 = new char[20];//(char *)malloc(10);

在C#中class是引用類型分配在堆中 struct是值類型分配在棧中。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多