0%
- 继承
- 复合
- 委托
复合
- 表示有
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| template<class T>
class queue{ .... deque<T> c; public: bool empty() const{return c.empty();} size_type size() const {return c.size();} reference front(){return c.front();} reference back(){return c.back();} void push(const value_type& x){c.push_back(x);} void pop(){c.pop_front();} }
Container::Container():Component(){....}; Container::~Container():~Component(){....};
|
构造&析构
- 构造由内而外
- 析构由外而内
委托 Composition by Referce
- 内部有一个指针
1 2 3 4 5 6 7 8 9 10 11 12 13
| class StringRep; class String{ public: String(); String(const char* s); String(const String& s); String &operator=(const String& s); ~String(); private: StringRep* rep;
};
|
构造&析构
- 因为是引用所以生命周期可能不一致
继承
- is a
1 2 3 4 5 6 7 8 9 10
| struct _List_node_base { _List_node_base* _M_next; _List_node_base* _M_prev; }
template<typename _Tp> struct _List_node:public _List_node_base{ _Tp _M_data; }
|
构造&析构
- 构造由内而外
- 析构由外而内
父类函数的析构函数要是virtual
继承与虚函数
- non-virtual 函数:不希望子类重新定义
- virtual:希望子类重新定义,但已有默认定义
- pure vitual: 希望子类重新定义,当前没有默认定义
1 2 3 4 5 6
| class Shape{ public: virtual void draw() const =0; virtual void error(const std::string& msg); int objectID()const; }
|
sample
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| CDocument::OnFileOpen(){ ... Serialize(); ... }
Class CMyDoc:public CDocument{ virtual Serialize(){
} }
main(){ CMyDoc myDoc; .... myDoc.OnFileOpen(); }
|
Template Method(设计模式)
- 构建子类对象
- 调用父类方法(父类方法中调用了,虚函数)