【C++】面向對象的三大特性:封裝、繼承、多態

1. 封裝

  • 封裝:隱藏對象的屬性和實現細節,僅對外公開接口和對象進行交互。
  • 封裝性實際上是由編譯器去識別關鍵字public、private和protected,體現在類的成員可以有公有成員(public),私有成員(private),保護成員(protected)。
  • 私有成員是在封裝體內被隱藏的部分,只有類的成員函數纔可以訪問私有成員,而在類體外的函數時不能訪問的;公有成員是封裝體與外界的一個接口,類體外的函數可以訪問公有成員;保護成員是隻有該類的成員函數和該類的派生類纔可以訪問的。
  • 封裝的作用是:降低耦合。

2. 繼承

  • 繼承是面向對象程序設計使代碼可以複用的最重要的手段,它允許程序員在保持原有類特性的基礎上進行擴展,增加功能,這樣產生新的類,稱派生類;

2.1 格式

//Person爲父類、基類,Student爲派生類、子類,public爲繼承方式
class Student : public Person
{
}

2.2 繼承方式

在這裏插入圖片描述
【基類成員在不同繼承方式下的訪問】
在這裏插入圖片描述

2.3 繼承中的作用域

  • 在繼承體系中基類和派生類都有獨立的作用域;
  • 子類和父類中有同名成員,子類成員將屏蔽父類對同名成員的直接訪問,這種情況叫隱藏,也叫重定義;
  • 實際中在繼承體系裏面最好不要定義同名的成員。

2.4 菱形繼承

2.4.1 什麼是菱形繼承
  • 菱形繼承是多繼承的一種特殊情況;
  • 菱形繼承會有數據冗餘和二義性;
2.4.2 菱形虛擬繼承
  • 虛擬繼承可解決菱形繼承的二義性和數據冗餘的問題。
  • 爲什麼虛擬繼承可以解決這兩個問題:由於虛擬繼承中存在虛基表。
    在這裏插入圖片描述

3. 多態

  • 多態是在不同繼承關係的類對象,去調用同一函數,產生了不同的行爲;

【在繼承中構成多態的兩個條件】

  • 必須通過基類的指針或者引用調用虛函數;
  • 被調用的函數必須是虛函數,且派生類必須對基類的虛函數進行重寫。

【重載、重寫、重定義區別】
在這裏插入圖片描述

3.1 抽象類

  • 包含純虛函數的類,抽象類也成爲接口類;
  • 純虛函數:在虛函數的後面寫上 = 0 ,則這個函數爲純虛函數;
  • 作用:要求派生類對虛函數進行重寫。

3.2 虛函數和虛函數表

  • 虛函數:即被virtual修飾的類成員函數稱爲虛函數;
  • 虛函數表本質是一個存虛函數指針的指針數組;
  • 虛函數和虛函數表均在代碼段。

文章參考鏈接:
鏈接1、鏈接2、鏈接3

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章