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裡面的變數是成員,其他的不太記得了,建議問下專業人士!
據我所知:
- 成員默認可見性和默認繼承方式,class是private,struct是public;
- 模板參數表中class可以取代typename,struct不能。
從用法的角度:其他人都說了。
從語言的角度:這是哲學問題。
從編譯器的角度:這根本不是問題。
你可能是譚浩強書籍的受害者.jpg
c++中只有默認訪問控制符的區別
當然去到java c#那些又不一樣了是個歷史遺留問題。現在在C++裡面寫inner class的話就必須用struct才行,如果不是的話就都可以用。這個設計很智障,但是無解
推薦閱讀:
※Google C++ Style Guide 中為什麼禁止使用預設函數參數?
※關於C++中的下劃線?
※C++ 如何自動推導遞歸 lambda 函數的類型?
※關於c++ default constructor的問題,這個說法對嗎?
※c++中的左值跟右值怎麼區分?