C 物件導向程式設計

2021-06-09 02:57:08 字數 1068 閱讀 4936

物件導向程式設計:以物件為中心,將資料和方法封裝在一起。

三要素:抽象繼承 多型

五個基本原則:

單一職責原則:就乙個類而言,應該有且僅有乙個引起它變化的原因。

開放-封閉原則:是說軟體實體(類、模組、函式等等)應該可以擴充套件,但是不可修改。

黎克特制替換換原則:子類應當可以替換父類並出現在父類能夠出現的任何地方。

依賴倒置原則:高層模組不應該依賴低層模組。兩個都應該依賴抽象。抽象不應該依賴細節。細節應該依賴抽象。

介面隔離原則:採用多個與特定客戶類有關的介面比採用乙個通用的涵蓋多個業務方法的介面要好。

陳浩的c++ 虛函式表解析:

編譯器編譯乙個擁有虛函式的類時,都會額外申請一塊記憶體儲存虛函式表virtual table,虛函式表儲存所有虛函式位址。類例項化為物件時,在物件儲存區某個位置儲存乙個vptr指標,vptr指標指向虛函式表表起始位址。這個指標具體放在什麼位置,虛函式表怎麼組織,怎麼索引各個虛函式,這些都是編譯器在編譯期間決定的,在不同編譯環境下可能不相同。

原因是,在子類的建構函式執行時,虛函式表還沒有被子類覆蓋,換句話說,此時呼叫的函式是當前類的函式,虛函式機制在建構函式中無法觸發。其原因在於子類構造時各個初始化步驟的呼叫順序:

全部推演過程見此:

直接摘錄構造順序:

1.構造子類建構函式的引數

2.子類呼叫基類建構函式

3.基類設定vptr

4.基類初始化列表內容進行構造

5. 基類函式體呼叫

6. 子類設定vptr

7. 子類初始化列表內容進行構造

8. 子類建構函式體呼叫

(注意一點,初始化列表內的資料不按書寫順序,而是按類內部的定義順序)

析構的順序恰好相反,所以也不要在析構函式中呼叫虛函式,那樣也是沒有意義的。

從設計理念上說,建構函式不需要是虛函式;從當前vptr的實現機制上說,無法實現虛的建構函式。

詳細可見這裡:

在vcl應用中運用mvc模式

從mvc架構到c++的多型實現

mvc模式已死?何不試試move 

用c++進行設計模式解析和實現

設計模式c++實現

c 物件導向程式設計 物件導向

什麼是物件導向 是對現實世界理解和抽象的方法。物件導向程式設計的特點 易維護,易擴充套件,靈活性好,重用 類 對事物的抽象定義,即事物具有的共同特徵和行為。物件 即對類進行例項 類是抽象的,物件是具體的 類的定義 語法 訪問修飾符 class 類名類的成員 包括字段,屬性,方法,常量,事件和索引器等...

C 物件導向程式設計

1.1 類與物件 物件 object 是類 class 的乙個例項 instance 如果將物件比作房子,那麼類就是房子的設計圖紙。所以物件導向程式設計的重點是類的設計,而不是物件的設計。類可以將資料和函式封裝在一起,其中函式表示了類的行為 或稱服務 類提供關鍵字public protected 和...

c 物件導向程式設計

這裡強調是物件導向程式設計的易錯點和常用技巧,嚴格來說大多數時候使用的封裝和繼承來完成的物件程式設計只能算是基於物件的程式設計,結合物件的繼承和多型特性編寫的程式才算是物件導向程式設計。繼承涉及到一些複製控制特性,主要如下 a 不顯式呼叫父類建構函式時,子類建構函式會先隱式呼叫父類預設建構函式 b ...