C++中結構體和類的區別

在C++中,結構體是一種特殊形態的類。函數

結構體和類的惟一區別就是:  結構體和類具備不一樣的默認訪問控制屬性spa

  中,對於未指定訪問控制屬性的成員,其訪問控制屬性爲私有類型(private)對象

  結構體中,對於未指定任何訪問控制屬性的成員,其訪問控制屬性爲公有類型(public)繼承

C++中,不使用結構體絲絕不會影響程序的表達能力。C++之因此要引入結構體,是爲了保持和C程序的兼容性。內存

有時仍會在C++中使用結構體,是由於,能夠使用結構體將不一樣類型數據組成總體,方便於保存數據。(若用類來保存,因類中成員默認爲私有,還要爲每一個數據成員特定函數來讀取和改寫各個屬性,比較麻煩。)class

 

C語言中結構體不容許定義函數成員,且沒有訪問控制屬性的概念。兼容性

C++爲C語言中的結構體引入了成員函數、訪問控制權限、繼承、包含多態等面向對象特性。權限

C++在struct以外引入了class關鍵字,但爲了保持與C程序的兼容,C++保留了struct關鍵字,並規定結構體默認訪問控制權限爲公有類型。程序

另外,C語言中,空結構體的大小爲0,而C++中空結構體(屬於空類)的大小爲1數據

C++中空類的大小爲1的緣由

  空類也能夠實例化,類實例化出的每一個對象都須要有不一樣的內存地址,爲使每一個對象在內存中的地址不一樣,因此在類中會加入一個隱含的字節。

相關文章
相關標籤/搜索