原文:
http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Structs_vs._Classes
有關struct和class之間的觀念,成大SCREAM Lab的這篇文章寫的很好:
http://screamlab-ncku-2008.blogspot.tw/2009/10/c-struct-class-keywords.html
簡單來說,在C++中struct和class只有default access level上的不同,其餘皆相同。struct也可以有method、ctor/dtor、繼承、以及多型等等。在struct和class這兩個關鍵字的使用上,google c++ style guide規定struct只能有passive objects,如果希望在user-defined type上加入mehtod或是一些Object-Oriented的應用,那就要用class關鍵字。如果是為了設定struct內的資料,struct也可以加入ctor/dtor、Initialize()、Reset()、Validate()等等method。
這是因為要讓struct和class這兩個關鍵字,有不同的semantic meanings。過去C語言還沒有物件導向的觀念時,struct就只用於data aggregation。C++出來以後,雖然struct可以做到和class相同的功能,但是習慣上大多數programmer還是只把struct用於data aggregation。至於為什麼C++要讓struct和class的功能如此相同,可以閱讀上面SCREAM lab的連結,在此就不贅述了。
在C#中,struct和class的功能有很大的差異,但是觀念上和google C++ style guide類似,struct用於data agregation而class用於Object-Oriented的一些應用。不同的是在C++中,我們只能要求programmer把struct和class用在不同地方,而C#則是build-in的language feature讓struct和class用在不同地方。
而當使用STL時,google c++ style guide規定可用struct關鍵字來宣告functor和trait。