面向對象程序設計
OOP概述
1.面向對象程序設計的核心思想:數據抽象(封裝)、繼承和動態綁定(多態性)。
通過數據抽象,我們可以將類的接口與實現分離;使用繼承,可以定義相似的類型並對其相似關系建模;使用動態綁定,可以在一定程度上忽略相似類型的區別,而以統一的方式使用它們的對象。
封裝可以隱藏實現細節,使得代碼模塊化;繼承可以擴展已存在的代碼模塊(類),它們的目的都是為了代碼重用。而多態則是為了實現另一個目的,接口重用!
2.虛函數意義:對於某些函數,基類希望它的派生類各自定義適合自己的版本,此時基類就將這些函數聲明成虛函數(virtural)。
任意非static成員都可以為虛成員。
3.動態綁定
定義基類
1.基類通常都應該定義一個虛析構函數,即使該函數不執行任何實際操作。這保證了在任何情況下,不會出現由於析構函數未被調用而導致的內存泄漏。
class Quote { public: ... virtual ~Quote()=default; //虛析構函數 }
2.成員函數與繼承
基類必須將兩種成員函數區分開:一種是基類希望其派生類進行覆蓋的函數,此類函數聲明為虛函數;另一種是希望其派生類直接繼承而不要改變的函數,非虛成員函數。
虛函數的解析過程發生在運行時(直到運行時才會決定到底執行哪個版本);;
3.訪問控制與繼承
派生訪問說明符對於派生類的成員(及友元)能否訪問其直接基類的沒有影響。對基類成員的訪問權限只與基類中的訪問說明符有關。
派生類能訪問基類的public成員,而不能訪問private成員。
而對於protected成員:
1)和private成員一樣,protected成員對於類的用戶來說是不可訪問的。
2)和public成員類似,proected成員對於派生類的成員和友元來說是可訪問的。
面向對象程序設計