問題:
C語言中有struct自定義結構體類型;
C++中也有struct類型,而且,與C++中面向對象主要的數據類型class還極為相似。
那麼,C++中struct和class之間有什麼區別,什麼情況下使用struct呢?
解決辦法:
從C++語言設計者Bjarne Stroustrup的大作《C++編程語言(特別版)》中歸納C++中struct和class的區別,有以下幾點:
1. 成員的默認訪問權限。struct的成員默認是public的;class的成員默認是private的;
2. 默認繼承權限。在沒有明確指定的情況下,struct的默認繼承方式是public,class的默認繼承方式是private;
3. 作者認為,struct S { ...不過是class S { public: ...的簡寫形式。
4. 但作者的習慣用法是,將struct用於所有成員都是public的那些類,而這樣的類,“並不是完整的類型,不過是個數據結構”。
5. 對於有人提出的說法“class能用於模板參數,而struct不能用於模板參數”,本人持謹慎的懷疑態度。
因為,《C++編程語言(特別版)》13.2中指出,template<class C>只是說C是一個類型名,它不必一定是某個類的名字。
類型名的概念比類名更廣泛,不僅包括由類定義引進的類類型的名字,還包括語言的內部類型、枚舉、typedef引進的名字等。
本人根據以上總結,決定在自己使用C++的編程中,始終將struct作為一種復雜的數據結構來使用,其成員只包含成員變量,不包含成員函數。
這樣,struct在C++中就與C語言中的意義更為接近,但C++中的struct更加安全。