C plus plus day4 组合与继承 虚函数
复合 has a
Adapter设计模式
//Adapter template <class T> class queue { protected: deque<T> c; //底层容器 public: //以下完全利用c的操作函数完成 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的构造函数搜先调用Component的default构造函数 然后才执行自己。
析构函数执行是由外而内
container的析构函数首先执行自己,然后再调用component的析构函数
继承 is a
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; };
继承关系下的构造函数和析构函数
构造由内而外
子类的构造函数先调用父类的构造函数,然后再执行自己
析构由外而内
子类的析构函数首先执行自己,然后再调用父类的析构函数
虚函数
class Shape{ public: virtual void draw() const =0; pure virtual 子类必须去定义 virtual void error(const std::string& msg); impure virtual int objectID() const; non-virtual }
class Rectangel:public Shape{...};
#include <iostream> using namespace std; class CDocument { public: CDocument(); void OnFileOpen() { cout<<'' <<endl; ... Serialize(); 当子类执行到这里时 会调用自己的 virtual func 然后返回父类 继续执行后面的 ... } virtual void Serialize(){}; }; class CMydoc : public CDocument { public: CMydoc(); virtual void Serialize(){ ... } }; int main() { /* code */ CMydoc mydoc; mydoc.OnFileOpen(); }