C++-三大特性


C++的三大特性:繼承、多態、封裝

1、繼承

被繼承的是父類(基類),繼承出來的類是子類(派生類),子類擁有父類的所有的特性。

繼承方式有公有繼承、私有繼承,保護繼承。默認是私有繼承

  • 公有繼承中父類的公有和保護成員在子類中不變,私有的在子類中不可訪問。
  • 私有繼承中父類的公有和保護成員在子類中變為私有,但私有的在子類中不可訪問。
  • 保護繼承中父類的公有和保護成員在子類中變為保護,但私有的在子類中不可訪問。

c++語言允許單繼承和多繼承,

優點:繼承減少了重復的代碼、繼承是多態的前提、繼承增加了類的耦合性;
缺點:繼承在編譯時刻就定義了,無法在運行時刻改變父類繼承的實現;父類通常至少定義了子類的部分行為,父類的改變都可能影響子類的行為;如果繼承下來的子類不適合解決新問題,父類必須重寫或替換,那么這種依賴關系就限制了靈活性,最終限制了復用性。
虛繼承:為了解決多重繼承中的二義性問題,它維護了一張虛基類表。

2、多態

多態性是指對不同類的對象發出相同的消息將會有不同的實現
 C++有兩種多態,稱為動多態(運行期多態)和靜多態(編譯器多態),靜多態主要是通過模板來實現,而動多態是通過虛函數來實現的。即在基類中存在虛函數(一般為純虛函數)子類通過重載這些接口,使用基類的指針或者引用指向子類的對象,就可以調用子類對應的函數,動多態的函數調用機制是執行器期才能確定的,所以他是動態的。

優點:大大提高了代碼的可復用性;提高了了代碼的可維護性,可擴充性;
缺點:易讀性比較不好,調試比較困難; 模板只能定義在頭文件中,當工程大了之后,編譯時間十分的變態;

3、封裝

隱藏類的屬性和實現細節,僅僅對外提供接口,
 封裝性實際上是由編譯器去識別關鍵字public、private和protected來實現的,體現在類的成員可以有公有成員(public),私有成員(private),保護成員(protected)。私有成員是在封裝體內被隱藏的部分,只有類體內說明的函數(類的成員函數)才可以訪問私有成員,而在類體外的函數時不能訪問的,公有成員是封裝體與外界的一個接口,類體外的函數可以訪問公有成員,保護成員是只有該類的成員函數和該類的派生類才可以訪問的。

優點:隔離變化;便於使用;提高重用性;提高安全性
 缺點:如果封裝太多,影響效率;使用者不能知道代碼具體實現。

重載和覆蓋

定義:

重載:寫一個與已有函數同名但是參數表不同的函數。
覆蓋:虛函數總是在派生類中被改寫,即函數名和參數都一樣,只是函數的實現體不一樣。。

類的關系區別:

覆蓋是子類和父類之間的關系,是垂直關系;重載是同一個類中方法之間的關系,是水平關系

image


免責聲明!

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



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