標籤:

C++的class與struct到底有什麼不同?

C++還可以這麼用的啊?那麼class與struct有什麼區別呢……直接當作class用也可以的吧= =


就是一樣的,除了默認public和private


語法上只有一個區別,默認成員是public還是private。這麼設計的原因是為了兼容C。

但是語義上一般傾向於把struct當作C時代的struct來用,即只有成員變數,沒有邏輯(或只有極其簡單的數據存入讀取邏輯),用來把多個變數打包成一個類型,而不用struct來做面向對象編程意義上的class。這個是編碼風格的範疇,為的是方便讀代碼的人理解。


struct是從C語言引入過來的,然後被賦予更多功能變成了class,C++保留struct主要是為了C的兼容性,但是此struct已經非C語言的struct了,是個披著struct外衣的特殊的class。

如果寫C++語言應用不考慮與C的兼容和互相調用,寫成struct沒有任何意義,直接寫class就好了。


1.class可以用在模板中替代typename,struct不能

2.成員的默認訪問許可權不同(class默認private,struct默認public)

3.作為父類時其默認繼承方式不同(同2)

用法個人理解:

如果是純數據的結構推薦使用struct

設計連續內存數據的存儲的建議用struct,譬如讀特定結構的文件內容,可以直接讀到struct。

如果涉及數據處理的推薦用class


謝邀

好久沒碰C++了

兩者區別不大,struct可以繼承class,同樣class也可以繼承struct

就像輪子哥說的那樣,如果把struct改成class,訪問控制由public變為private了,但是還是可以繼續使用,以前喜歡用class,因為這個單詞好記!

詳細的區別也是有的,例如struct裡面的變數是數據,class裡面的變數是成員,其他的不太記得了,建議問下專業人士!


據我所知:

  1. 成員默認可見性和默認繼承方式,class是private,struct是public;
  2. 模板參數表中class可以取代typename,struct不能。


從用法的角度:其他人都說了。

從語言的角度:這是哲學問題。

從編譯器的角度:這根本不是問題。


你可能是譚浩強書籍的受害者.jpg

c++中只有默認訪問控制符的區別

當然去到java c#那些又不一樣了


是個歷史遺留問題。現在在C++裡面寫inner class的話就必須用struct才行,如果不是的話就都可以用。這個設計很智障,但是無解


推薦閱讀:

Google C++ Style Guide 中為什麼禁止使用預設函數參數?
關於C++中的下劃線?
C++ 如何自動推導遞歸 lambda 函數的類型?
關於c++ default constructor的問題,這個說法對嗎?
c++中的左值跟右值怎麼區分?

TAG:C | 數據結構 |