类与类之间的关系
组合 composition has-a 关系,
继承 inheritance is-a 关系
委托 delegation 是 Compsition by reference 指针。
compositon 的析构和构造, 构造由内而外(建房子), 析构由外而内 (拆房子)。
构造,Container先调用Component的构造函数,再调用自己的构造函数。Container::Container():Component(){...}
析构,Container先调用自己的析构函数,再调用Component的析构函数。Container::~Container(){... ~Component()}
inheritance 的构造和析构,构造由内而外(建房子), 析构由外而内 (拆房子)。
构造,Derived先调用Base的构造函数,再调用自己的构造函数。Derived::Derived():Base(){...}
析构,Derived先调用自己的析构函数,再调用Base的析构函数。Derived::~Derived(){... ~Base()}
继承和虚函数 inheritance with virtual functions
虚函数:基类中的成员函数,虚函数重新定义 override
non-virtual函数,不希望派生类重新定义它。void draw();
virtual函数,希望派生类重新定义,且基类对此已有默认定义。virtual void draw();
pure virtual 函数,希望派生类一定要重新定义它,基类对它没有默认的定义。virtual void draw() = 0;
继承和组合 Inheritance & Composition,构造由内而外, 析构由外而内 。
第一种情况:构造 Base -> Component -> Derived 析构 Derived -> Component -> Base
第二种情况:构造 Component -> Base -> Derived 析构 Derived -> Base -> Component