如果說複合和委託是has-a,那繼承就是is-a。
1.繼承的語法。
舉個例子(代碼):
struct _List_node_base
{
_List_node_base* _M_next;
_List_node_base* _M_prev;
};
template<typename _Tp>
struct _List_node
:public _List_node_base
{
_Tp _M_data;
};
黑色部分就是語法,加上之後,就是說_List_node繼承_List_node_base.
C++中除了public還有private還有protected。
傳達的意思就是,是一種_List_node_base類。
2.從內存的角度來看繼承。
_List_node ------->_List_node_base
繼承是繼承所有的數據。以第一點中的作爲例子,_List_node除了有一個_M_base的指針還有父類中的兩個指針。
3.繼承下的ctor與dtor、
Derived ---->Base
可以說,子類的對象有父類的成分在裏面。如圖:
依然是構造時候由內而外:Derived的構造函數首先調用Base的default構造函數,最後執行自己的構造函數 Derived::Derived(.....) : Base(){.......}
析構時候由外而內:Derived先調用自己的析構函數,再調用Base的析構函數 Derived::~Derived(.....){........~Base() }
請注意:Base的構造函數必須是virtual。
4.繼承的用處:
繼承一般與虛函數配合使用。對於3點的注意,明天的筆記虛函數中解釋。