結構體 struct 和類 class 的比較
C的結構體和C++結構體的區別
1、組成不同
C的結構體內不允許有函式存在,C++允許有內部成員函式,且允許該函式是虛擬函式。所以C的結構體是沒有建構函式、解構函式、和this指標的。
2、許可權不同
C的結構體對內部成員變數的訪問許可權只能是public,而C++允許public,protected,private三種。
3、特性(繼承)不同
C語言的結構體是不可以繼承的,C++的結構體是可以從其他的結構體或者類繼承過來的。
以上都是表面的區別,實際區別就是面向過程和麵向物件程式設計思路的區別:
1、C的結構體只是把資料變數給包裹起來了,並不涉及演算法。
2、C++是把資料變數及對這些資料變數的相關演算法給封裝起來,並且給對這些資料和類不同的訪問許可權。
3、 C語言中是沒有類的概念的,但是C語言可以通過結構體內建立函式指標實現面向物件思想。
結構體和類之間的區別
1、結構體是很多資料的結構,裡面不能有對這些資料的操作,而類class是資料以及對這些資料的操作的封裝,是面向物件的基礎;
2、而且class對成員變數有訪問許可權的控制,而struct則沒有,在結構體外可以訪問結構體內任何一個變數,而在類外,則不能訪問類中私有的成員變數。
3、這只是最主要的幾點區別,還有其他的區別,總之,類是比結構體更高階的對資料的封裝,結構體能做的,類都能做,反之則不然。
結構在堆疊中建立,是值型別,而類是引用型別。每當需要一種經常使用的型別,而且大多數情況下該型別只是一些資料時,使用結構能比使用類獲得更佳效能。
結構是值型別,所以會影響效能,但根據使用結構的方式,這種影響可能是正面的,也可能是負面的。正面的影響是為結構分配記憶體時,速度非常快,因為它們將內 聯或者儲存在堆疊中。在結構超出了作用域被刪除時,速度也很快。另一方面,只要把結構作為引數來傳遞或者把一個結構賦給另一個結構(例如A=B,其中A和B是結構),結構的所有內容就被複制,而對於類,則只複製引用。這樣,就會有效能損失,根據結構的大小,效能損失也不同。注意,結構主要用於小的資料結構。但當把結構作為引數傳遞給方法時,就應把它作為ref引數傳遞,以避免效能損失——此時只傳遞了結構在記憶體中的地址,這樣傳遞速度就與在類中的傳遞速度一樣快了。另一方面,如果這樣做,就必須注意被呼叫的方法可以改變結構的值。
class和struct有且僅有一個區別,那就是對於class說明的類成員,函式也好,變數也好,如果沒有指定型別,預設是private限定的。而對於struct,則是public的。
結構體陣列效率比類陣列效率高(不需要裝箱合拆箱)。結構體集合(如Hashtable)效率比類集合效率低。集合的元素是引用型別,所以結構體必須進行裝箱和拆箱處理。所以類在大的集合中更有效率。