C++ 結構體和類的區別


C/C++結構體的區別 
C中的結構體和C++中結構體的不同之處:在C中的結構體只能自定義數據類型,結構體中不允許有函數,而C++中的結構體可以加入成員函數。
C++中的結構體和類的異同:
一、相同之處:結構體中可以包含函數;也可以定義public、private、protected數據成員;定義了結構體之后,可以用結構體名來創建對象。但C中的結構體不允許有函數;
也就是說在C++當中,結構體中可以有成員變量,可以有成員函數,可以從別的類繼承,也可以被別的類繼承,可以有虛函數。
二、不同之處:結構體定義中默認情況下的成員是public,而類定義中的默認情況下的成員是private的。類中的非static成員函數有this指針,(而struct中沒有是錯誤的,一直被誤導啊,經過測試struct的成員函數一樣具有this指針),類的關鍵字class能作為template模板的關鍵字 即template<class T> class A{}; 而struct不可以。
實際上,C中的結構體只涉及到數據結構,而不涉及到算法,也就是說在C中數據結構和算法是分離的,而到C++中一類或者一個結構體可以包含函數(這個函數在C++我們通常中稱為成員函數),C++中的結構體和類體現了數據結構和算法的結合。

 

1.C的結構體和C++結構體的區別

   1.1 C的結構體內不允許有函數存在,C++允許有內部成員函數,且允許該函數是虛函數。所以C的結構體是沒有構造函數、析構函數、和this指針的。

   1.2 C的結構體對內部成員變量的訪問權限只能是public,而C++允許public,protected,private三種。

   1.3 C語言的結構體是不可以繼承的,C++的結構體是可以從其他的結構體或者類繼承過來的。

   以上都是表面的區別,實際區別就是面向過程面向對象編程思路的區別:

       C的結構體只是把數據變量給包裹起來了,並不涉及算法。

       而C++是把數據變量及對這些數據變量的相關算法給封裝起來,並且給對這些數據和類不同的訪問權限。

 

   C語言中是沒有類的概念的,但是C語言可以通過結構體內創建函數指針實現面向對象思想。

 

2.C++的結構體和C++類的區別

   2.1 C++結構體內部成員變量及成員函數默認的訪問級別是public,而c++類的內部成員變量及成員函數的默認訪問級別是private。

   2.2 C++結構體的繼承默認是public,而c++類的繼承默認是private。

 

參考網址:

C++ 結構體和類的區別


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM