天天看點

c++之面向對象程式設計

面向對象程式設計基于三個基本概念:資料抽象、繼承和動态綁定。

OOP

面向對象程式設計(object-oriented programming)核心思想是資料抽象、繼承和動态綁定。資料抽象實作類的接口與實作分離;使用繼承,可以定義相似的類型并對其相似關系模組化;使用動态綁定,可以在一定程度忽略相似類型的差別,用統一的方式使用它們的對象。

在c++語言中,當我們使用基類的引用(或指針)調用一個虛函數時将發生動态綁定。動态綁定又稱運作時綁定。

定義基類和派生類

基類通常定義一個虛析構函數,即使不執行任何實際操作也應該如此。

防止繼承發生:類名後跟關鍵詞final。

虛函數

對虛函數的調用在運作時才被解析。

在某些情況下,希望虛函數的調用不要進行動态綁定,而是強迫執行虛函數的某個特定版本。使用作用域運算符(::)可以實作目的。通常情況,隻有成員函數(或友元)中的代碼才需要使用作用域運算符來回避虛函數機制。

抽象基類

通路控制與繼承

和私有成員類似,受保護成員對于類的使用者來說不可通路。

和公有成員類似,受保護成員對于派生類成員和友元來說可以通路。

派生類的成員或友元隻能通過派生類對象來通路基類的受保護成員,派生類對一個基類對象中的受保護成員沒有任何通路特權。

某個類對其繼承來的成員通路限制受兩個因素影響:一是基類中該成員的通路說明符,二是在派生類清單中的通路說明符。

類有兩種不同使用者:普通使用者和類的實作者。普通使用者編寫代碼使用類的對象,隻能通路類的公有成員;實作者負責編寫類的成員和友元代碼,成員和友元既能通路類的共有部分,也能通路類的私有部分。

友元關系不能繼承,基類的友元在通路派生類成員時不具有特殊性,派生類的友元也不能随意通路基類的成員

繼承中的類作用域

派生類成員将隐藏同名的基類成員。

構造函數與拷貝控制

繼續閱讀