相同之處:
-
C++中的結構體中可以包含函數,也可以定義public、private、protected數據成員;定義了結構體之后,可以使用結構體名來創建對象,但是C中的結構體不允許含有函數;即
-
在C++中,結構體中可以有成員變量,成員函數,可從別的類繼承,也可以被別的類繼承,可以含有虛函數;
不同之處:
-
結構體定義中默認情況下的成員是public,而類定義中的默認情況的成員是private的;
-
類中的非static成員函數有this指針(C++的結構體的非static成員函數也一樣具有this指針),類的關鍵字class能作為template模板的關鍵字,即template<class T> class A{};而結構體的struct不可以;
C的結構體與C++結構體的區別:
-
C的結構體內不允許有函數存在,C++允許有內部成員函數,並且允許該函數是虛函數;所以C的結構體是沒有構造函數、析構函數和this指針的;
-
C的結構體對內部成員變量的訪問權限只能是public,而C++允許public、protected和private三種;
-
C語言的結構體是不可以繼承的,C++的結構體是可以從其他的結構體或者類繼承過來的;
以上是表面的區別,實質上的區別是面向過程和面向對象編程思想的區別:C的結構體值時把數據變量給包裹起來了,並不涉及算法;而C++是把數據變量以及對這些數據變量的相關算法給封裝起來,並且給對這些數據和類不同的訪問權限;
C++的結構體和C++類的區別:
默認權限區別:結構體->public 類->private
-
C++結構體內部成員變量成員以及成員函數默認的訪問級別是public的,而C++類的內部成員變量以及成員函數的默認訪問級別是private的;
-
C++結構體的繼承默認是public的,而C++類的繼承默認是private的