c++ 結構體和類的區別

來源:互聯網
上載者:User

轉自:http://blog.csdn.net/fengxinziyang/article/details/5909237   (PS:我看的這本書《Visual C++從初學到精通》說結構體也可以繼承和被繼承,也可以有虛函數)

區別:

結構是一種用關鍵字struct聲明的自訂資料類型。與類相似,也可以包含建構函式,常數,欄位,方法,屬性,索引器,運算子和巢狀型別等,不過,結構是實值型別。

1.結構的建構函式和類的建構函式不同。

   a.結構不能包含顯式的無參數建構函式。結構成員將自動初始化為它們的預設值。

   b.結構不能包含以下形式的初始值設定類:base(argument-list);

2.對於結構中的執行個體欄位成員,不能在聲明時賦值初始化。

3.聲明了結構類型後,可以使用new運算子建立構造對象,也可以不使用new關鍵字。如果不使用new,那麼在初始化所有欄位之前,欄位將保持未賦值狀態且對象不可用。

4.結構不支援繼承,即一個結構不能從另一個結構或類繼承,而且不能作為一個類的基類。但是,結構從基類OBJECT繼承。結構也可以實現介面。

5.什麼時候用結構呢?結構使用簡單,並且很有用,但是要牢記:結構在堆棧中建立,是實值型別,而類是參考型別。每當需要一種經常使用的類型,而且大多數情況下該類型只是一些資料時,使用結構能比使用類獲得更佳效能。

結構是實值型別,所以會影響效能,但根據使用結構的方式,這種影響可能是正面的,也可能是負面的。正面的影響是為結構分配記憶體時,速度非常快,因為它們將內聯或者儲存在堆棧中。在結構超出了範圍被刪除時,速度也很快。另一方面,只要把結構作為參數來傳遞或者把一個結構賦給另一個結構(例如A=B,其中A和B是結構),結構的所有內容就被複製,而對於類,則只複製引用。這樣,就會有效能損失,根據結構的大小,效能損失也不同。注意,結構主要用於小的資料結 構。但當把結構作為參數傳遞給方法時,就應把它作為ref參數傳遞,以避免效能損失——此時只傳遞了結構在記憶體中的地址,這樣傳遞速度就與在類中的傳遞速 度一樣快了。另一方面,如果這樣做,就必須注意被調用的方法可以改變結構的值。

  還有一點:struct與class本質上應該是相同的,只是預設的存取權限不同(struct預設是public,class預設是private ).之所以要保留struct,很大一部分原因是為了與C相容吧(C++的一篇文章中是這麼說的,我感覺還是有一定的道理). class感覺是應該是struct的擴充,除了可以設定成員的訪問類型外,還可以有自己的成員函數,可以繼承派生等,好象struct能做的class都能做,但反過來就不行了,如果沒有保護資料的要求,struct能做的我都用struct做,比較簡單。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.