1. 程式人生 > >C++:三種類間關系

C++:三種類間關系

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++:三種類間關系