/********************
继承,复合,委托
template <calss,calss Sequence = deque<T>>//默认Sequence 是这种类型
//我里面有另外一种东西,那么就是代表复合
template <class T>
class queue
{
protected:
deque<T> c;
public:
bool empty() const{return c.empty();}//全都调用的c完成的
size_type size() const{return c.size();}
};
//A拥有B,A的功能都让B来做。
二、复合下的构造和析构
1、构造由内而外
外部的构造函数收先调用内部的default函数,然后再执行自己
Container::Container(...):Component(){...}
2、析构由外而内
Container 的析构函数首先执行自己,然后才调用Component的析构函数
Container::~COntainer(...){...~Component()};
三、 委托(Delegation)(Composition By reference)
class StringRep;
class String
{
public:
String();
String(const char* s);
String (const String& s);
~String();
private:
StringRep *rep;
};
class StringRep
{
friend class String;
StringRep(const char* s);
}
String中有一个指针指向StringRep,这就叫做委托,意思是我在任何时间点,我都可以调用你。把任务委托给你
四、继承(表示 is-a)
struct _List_node_base
{
_List_node_base* _M_next;
_List_node_base* _M_prev;
};
template <typename _Tp>
struct _List_node
:public _List_nde_base//继承
{
_Tp _M_data;
};
子类的对象里面有父类的成分在里面
五、继承关系下的析构和构造
构造由内而外 Dreived的构造函数首先调用Base的default的构造函数,然后再执行自己
Derived::Derived(...):Base{...};
析构由外而内 Derived的析构函数首先执行自己,然后才调用Base的析构函数
Derived::~Derived(...){...~Base()};