C++:三種類間關系
阿新 • • 發佈:2018-05-30
has-a c++ com ive tor ron default pri 代碼
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; };
C++:三種類間關系