在C++中,結構體是一種特殊形態的類。
結構體和類的唯一區別就是: 結構體和類具有不同的默認訪問控制屬性。
類中,對於未指定訪問控制屬性的成員,其訪問控制屬性為私有類型(private)
結構體中,對於未指定任何訪問控制屬性的成員,其訪問控制屬性為公有類型(public)
C++中,不使用結構體絲毫不會影響程序的表達能力。C++之所以要引入結構體,是為了保持和C程序的兼容性。
但有時仍會在C++中使用結構體,是因為,可以使用結構體將不同類型數據組成整體,方便於保存數據。(若用類來保存,因類中成員默認為私有,還要為每個數據成員特定函數來讀取和改寫各個屬性,比較麻煩。)
C語言中結構體不允許定義函數成員,且沒有訪問控制屬性的概念。
C++為C語言中的結構體引入了成員函數、訪問控制權限、繼承、包含多態等面向對象特性。
C++在struct之外引入了class關鍵字,但為了保持與C程序的兼容,C++保留了struct關鍵字,並規定結構體默認訪問控制權限為公有類型。
另外,C語言中,空結構體的大小為0,而C++中空結構體(屬於空類)的大小為1。
C++中空類的大小為1的原因:
空類也可以實例化,類實例化出的每個對象都需要有不同的內存地址,為使每個對象在內存中的地址不同,所以在類中會加入一個隱含的字節。