OO與設計模式第二次複習

2021-07-14 23:25:30 字數 1597 閱讀 2005

物件的記憶體布局

系統為每個物件分配一塊棧空間儲存資料成員

每個成員函式都包含乙個隱藏引數(編譯器自動加上的):this指標

(其實可以理解為oc的self)

:黑盒

// 封裝到類中的函式,需要新增static修飾符

:泛性關係

1 靜態多型性:函式過載,運算子過載

2 動態多型性:虛函式

c++中的虛函式的實現一般是通過虛函式表(效率不高,額外佔空間)。

編譯器會為每個有虛函式的類建立乙個虛函式表,該虛函式表將被該類的所有物件共享。類的每個虛成員佔據虛函式表中的一行。如果類中有n個虛函式,那麼其虛函式表將有n*4位元組的大小。

作用:應對變化

virtual 原則:如果某一方法有可能會被子類重寫,那麼這個方法必須要宣告為虛函式

注意:

出現子類的場合都可以用基類替換他

虛函式實現機制

只有有乙個虛函式,就生成虛表

虛表:函式指標(指向成員函式)陣列(資料結構)

有乙個指標vfptr指向這個虛表,每多乙個物件,就有多乙個指標vfptr指向同個虛表

產生派生類後,重寫後(有沒有virtual都一樣),把函式指標指向的函式替換成新函式

過載:乙個函式名多種不同實現(必須在同乙個類裡)

覆蓋:

class csharpe ;

};class circle : public csharpe ;

};

沒有報錯是因為作用域不同

重寫:寫乙個函式,和其中某個函式的函式名,函式返回值,引數都一樣(有沒有const那就不是重寫了,是新加)

class a 

};class b : public a

};

b類重寫了a的方法,違反了黎克特制代換原則

可以 設計模式中的單例模式

c c1;

ci.m = 10;

c c2;

c c3;

...

對於乙個類,只有乙個物件,c2 == c3 == c1

不管建立多少次,在記憶體中都只有乙份(只允許存在乙個副本)

在需要繼承的時候,為了防止記憶體洩漏,最好定義成虛函式

方法的集合

乙個類,繼承的除了乙個屬性類,其他都是繼承自需要遵守的協議(協議!!!!)

純虛函式,是必須實現的方法(requish),普通的虛函式 ,可選擇(optional)

簡單工廠模式

// 產品原型,產品,工廠,流水線

觀察者模式

對個觀察者同時監聽某一主題物件,這個主題物件在狀態發生改變時候,會通知所有觀察者物件,使他們能夠更新自己

委託**模式

mvc模式

實戰:簡易計算器的實現

黎克特制代換原則,子類物件一定能代替父類物件的所有行為

依賴倒轉原則,面向介面而不是面向實現

迪公尺特法則,不要呼叫已封裝過的類的東西

單一職責原則,乙個類該幹神馬就做神馬,專心幹一件事

封閉拓展原則,能加就不要改,保留原始增量

OO第二次部落格作業

從第4次作業開始,就進入了多執行緒程式設計的環節。我個人對於多執行緒的理解就是在乙個程式在執行時有多個執行流,能夠實現多個執行緒併發執行的技術。由於能在同一時間內執行多個執行緒,因而能夠提公升計算機的整體處理效能。第五次作業分析 由於第五次作業是我第一次接觸到多執行緒程式設計,因此這次作業對於我來說...

OO第二次部落格總結

第五次作業 度量圖 類圖 分析 這次作業的主要問題是對電梯請求如何分配給三部電梯,讓他們能夠同時工作且不出現問題。這其中涉及到了關於執行緒安全,資料同步的問題。但由於這是多執行緒的第一次作業,自己以前對多執行緒沒有一點概念,做此次作業之前查閱了很多資料,但還是有很多地方並沒有真正弄明白。這在此次作業...

OO第二次部落格總結

一 前言 oo的複雜程度可能和寫完的時間成正比,多項式時週三電工實習不帶電腦,到了計程車已經發展成週三下午5點開始寫readme 不過相比前幾次為語法耗費時間,計程車更多的是為設計來投入精力。多執行緒debug也很有意思,在寫多部電梯時,自己猛然發現除錯時加入的一句system.out.printl...