https://www.cnblogs.com/yiluyisha/p/9108626.html
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;
};