在c++中: 關(guān)于使用大括號(hào)初始化 class和struct如果定義了構(gòu)造函數(shù)的話,都不能用大括號(hào)進(jìn)行初始化 如果沒有定義構(gòu)造函數(shù),struct可以用大括號(hào)初始化。 如果沒有定義構(gòu)造函數(shù),且所有成員變量全是public的話,可以用大括號(hào)初始化。 關(guān)于默認(rèn)訪問權(quán)限 class中默認(rèn)的成員訪問權(quán)限是private的,而struct中則是public的。 關(guān)于繼承方式 class繼承默認(rèn)是private繼承,而struct繼承默認(rèn)是public繼承。 C中,結(jié)構(gòu)不允許含有成員函數(shù),在c++中則允許含有成員函數(shù) 比較一下 C 語(yǔ)言的 struct 和 C++ 的 struct 好了 訪問權(quán)限: C:public (沒有 private 訪問權(quán)限) C++:默認(rèn) public,可以用 protected/private 限制 內(nèi)容: C:只有數(shù)據(jù) C++:可以有數(shù)據(jù)、成員函數(shù)、構(gòu)造析構(gòu)函數(shù),與 class 相同 其它: C:除了存放數(shù)據(jù),沒有其它功能 C++:可以與 class 參與繼承,可以重載操作符,可以有模板結(jié)構(gòu)。。。 使用: C:需要 struct s 作為名稱聲明變量 C++:struct 關(guān)鍵字在聲明變量的時(shí)候可選 C++中struct已經(jīng)被擴(kuò)展,已經(jīng)不再是C時(shí)代的struct 那么C#中的struct 和C++里的區(qū)別在哪呢? (*) struct的內(nèi)存分配不同 C#: 在棧上分配 c++: 在哪分配由程序員說了算,只有用new的時(shí)候才在堆上分配 說實(shí)話我對(duì)堆棧的區(qū)別也有些不清楚可以參考http://baike.baidu.com/view/93201.htm stack: 由系統(tǒng)自動(dòng)分配。 例如,聲明在函數(shù)中一個(gè)局部變量 int b; 系統(tǒng)自動(dòng)在棧中為b開辟空間 heap: 需要程序員自己申請(qǐng),并指明大小,在c中malloc函數(shù) 如p1 = (char *)malloc(10); 在C++中用new運(yùn)算符 如p2 = new char[20];//(char *)malloc(10); 在C#中class是引用類型分配在堆中 struct是值類型分配在棧中。
|