Inheritance(继承)
- 表示 is-a ,如下代码所示:
class A { private: int a; }; class B : public A { private: int b; };
- 继承关系下的构造和析构:
构造由内而外
Derived的构造函数首先调用Base的default构造函数,然后才执行自己。如,Derived::Derived(...) : Base() { ... };
析构由外而内
Derived的析构函数首先执行自己,然后才调用Base的析构函数。如,Derived::~Derived(...) { ... ~Base() };
- 注意:
base class 的 dtor 必须是virtual,否则只会调用基类的析构函数,而不会调用派生类的析构函数;
Composition(复合)
- 表示 has-a ,如下代码所示:
class A { private: int a; }; class B { private: A a; int b; };
- 复合关系下的构造和析构:
构造由内而外
B的构造函数首先调用A的default构造函数,然后才执行自己。如,B::B(...) : A() { ... };
析构由外而内
B的析构函数首先执行自己,然后才调用A的析构函数。如,B::~B(...) { ... ~A() };
Delegation(委托)
- Composition by reference, 如下代码所示:
class A { private: int a; }; class B { private: A* a; int b; };