1. 程式人生 > >面向對象程序設計

面向對象程序設計

意義 round 類型 分開 bsp 程序設計 希望 我們 封裝

OOP概述

1.面向對象程序設計的核心思想數據抽象(封裝)、繼承和動態綁定(多態性)。

  通過數據抽象,我們可以將類的接口與實現分離;使用繼承,可以定義相似的類型並對其相似關系建模;使用動態綁定,可以在一定程度上忽略相似類型的區別,而以統一的方式使用它們的對象。

  封裝可以隱藏實現細節,使得代碼模塊化;繼承可以擴展已存在的代碼模塊(類),它們的目的都是為了代碼重用。而多態則是為了實現另一個目的,接口重用

2.虛函數意義:對於某些函數,基類希望它的派生類各自定義適合自己的版本,此時基類就將這些函數聲明成虛函數(virtural)。

  任意非static成員都可以為虛成員

3.動態綁定

當我們使用基類引用(或指針)調用一個虛函數時,將發生動態綁定。

定義基類

1.基類通常都應該定義一個虛析構函數,即使該函數不執行任何實際操作。這保證了在任何情況下,不會出現由於析構函數未被調用而導致的內存泄漏

class Quote
{
public:
    ...
    virtual ~Quote()=default;   //虛析構函數
}

2.成員函數與繼承

  基類必須將兩種成員函數區分開:一種是基類希望其派生類進行覆蓋的函數,此類函數聲明為虛函數;另一種是希望其派生類直接繼承而不要改變的函數,非虛成員函數。

  虛函數的解析過程發生在運行時(直到運行時才會決定到底執行哪個版本);;

對於非虛成員函數,其解析過程發生在編譯時而非運行時(在編譯時進行綁定)。

3.訪問控制與繼承

  派生訪問說明符對於派生類的成員(及友元)能否訪問其直接基類的沒有影響。對基類成員的訪問權限只與基類中的訪問說明符有關。

  派生類能訪問基類的public成員,而不能訪問private成員。

  而對於protected成員:

  1)和private成員一樣,protected成員對於類的用戶來說是不可訪問的。

  2)和public成員類似,proected成員對於派生類的成員和友元來說是可訪問的。

面向對象程序設計