一. 組合(復合),繼承,委託
1.composition(組合)has-a
1.1 組合舉例:(adapter 設計模式)
關係:利用deque功能實現所有queue功能
template1.2 構造與析構class queue
size_type size() const
reference front()
reference back()
void push(const value_type& x)
void pop()
};
構造由內而外:
container的建構函式先呼叫component的預設建構函式,再執行自己
如果預設建構函式不符合要求,需自己在外部建構函式寫明呼叫哪個內部建構函式
析構由外而內:
container的析構函式先執行自己,再呼叫component的析構函式
2. delegation(委託): composition by reference
以handle/body(pimpl)設計模式為例
關係圖:
}3 繼承 (is-a)
3.1 舉例:
struct _list_node_base3.2 構造與析構;templatestruct _list_node
: public _list_node_base
;
建構函式由內而外,析構函式由外而內;
derived的建構函式先呼叫base的預設建構函式,再執行自己
derived的析構函式先執行自己,再呼叫base的析構函式
base的析構函式必須為virtual,否則可能出現只呼叫基類析構函式,而未呼叫派生類析構函式的情況
二 虛函式與多型
1. 虛函式
函式的繼承,繼承的是呼叫權。
非虛函式:不希望子類重新定義(override 複寫)它
虛函式:希望子類重新定義(override)它
純虛函式:希望子類一定要重新定義它,你對他無定義。
class shape ;2 以開檔案為例class rectangle: public shape ;
class ellipse: public shape ;
共有部分在設計父類時事先實現;其他無法決定其定義的(如本例中如何讀檔案內容)
serialize宣告為虛函式,使其延緩到子類再重新定義,決定其具體的實現。
上述過程模擬**:
#include usingnamespace std;
class cdocument
virtual
void serialize(){};
}; class cmydoc : public cdocument
C 物件導向設計
一.組合 復合 繼承,委託 1.composition 組合 has a 1.1 組合舉例 adapter 設計模式 關係 利用deque功能實現所有queue功能 template class queue size type size const reference front reference...
物件導向設計
物件導向設計 object oriented design,ood 方法是oo方法中乙個中間過渡環節。其主要作用是對ooa分析的結果作進一步的規範化整理,以便能夠被oop直接接受。物件導向設計 ood 是一種軟體設計方法,是一種工程化規範。這是毫無疑問的。按照bjarne stroustrup的說法...
物件導向設計
1 物件導向的三要素 1.1 封裝 encapsulation a 封裝 合理的隱藏資料的隱藏 隱藏在方法背後 實現的隱藏 隱藏在介面背後 變化的隱藏 隱藏在抽象背後 b 封裝能夠提高物件的復用性 減低物件的耦合度c 良好的封裝 物件的高內聚 1.2 繼承 inheritance a 基於差異式程式...