派生類的資料成員由所有基類的資料成員與派生類新增的資料成員共同組成,如果派生類新增成員中包括其他類的物件(子物件),派生類的資料成員中實際上還間接包括了這些物件的資料成員。因此,構造派生類的物件時,必須對基類資料成員、新增資料成員和成員物件的資料成員進行初始化。派生類的建構函式必須要以合適的初值作為引數,隱含呼叫基類和新增物件成員的建構函式,來初始化它們各自的資料成員,然後再加入新的語句對新增普通資料成員進行初始化。
派生類建構函式的一般格式如下:
《派生類名》::《派生類名》(《參數列》) : 《基類名1>(《參數列1>),
……,
《基類名n>(《參數列n>),
《子物件名1>(《參數列n+1>),
……,
《子物件名m>(《參數列n+m>)
說明:
(1) 對基類成員和子物件成員的初始化必須在成員初始化列表中進行,新增成員的初始化既可以在成員初始化列表中進行,也可以在建構函式體中進行。
(2) 派生類建構函式必須對這三類成員進行初始化,其執行順序如下所述。
. 呼叫基類建構函式;
. 呼叫子物件的建構函式;
. 派生類的建構函式體;
(3) 當派生類有多個基類時,處於同一層次的各個基類的建構函式的呼叫順序取決於定義派生類時宣告的順序(自左向右),而與在派生類建構函式的成員初始化列表中給出的順序無關。
(4) 如果派生類的基類也是乙個派生類,則每個派生類只需負責其直接基類的構造,依次上溯。
(5) 當派生類中有多個子物件時,各個子物件建構函式的呼叫順序也取決於在派生類中定義的順序(自前至後),而與在派生類建構函式的成員初始化列表中給出的順序無關。
(6) 派生類建構函式提供了將引數傳遞給基類建構函式的途徑,以保證在基類進行初始化時能夠獲得必要的資料。因此,如果基類的建構函式定義了乙個或多個引數時,派生類必須定義建構函式。
(7) 如果基類中定義了預設建構函式或根本沒有定義任何乙個建構函式(此時,由編譯器自動生成預設建構函式)時,在派生類建構函式的定義中可以省略對基類建構函式的呼叫,即省略"《基類名》(《參數列》)"。
(8) 子物件的情況與基類相同。
(9) 當所有的基類和子物件的建構函式都可以省略時,可以省略派生類建構函式的成員初始化列表。
(10) 如果所有的基類和子物件建構函式都不需要引數,派生類也不需要引數時,派生類建構函式可以不定義。
派生類建構函式
1 建構函式和複製控制成員不能繼承,每個類定義自己的建構函式和複製控制成員。像任何類一樣,如果類不定義自己的預設建構函式和複製控制成員,就將使用合成版本。2 派生類的合成預設建構函式除了初始化派生類的資料成員之外,它還初始化派生類物件的基類部分。基類部分由基類的預設建構函式初始化。3 派生類建構函式...
派生類 建構函式
在hpp標頭檔案中,宣告建構函式中,必須為新增的資料成員和基類的資料成員提供資料,即每乙個形參代表乙個成員 派生類宣告建構函式入下,其中r是給新增的資料,後面是基類的成員。在cpp檔案定義的時候,必須建立基類的物件,即如果不是預設的物件,則必須顯示的建立基類的物件,將資料傳遞給基類的物件 如下圖 t...
派生類的建構函式
1.派生類的概念 以物件導向的程式設計的觀點來看,繼承表達的是物件類之間的相互關係。這種關係使得某類物件可以繼承另外一類物件的特徵和能力。如果一類物件繼承了另一類物件的特徵和能力,這個類就叫做所繼承類的派生類。1.1宣告乙個派生類的一般格式是 class 派生類名 派生方式 public or pr...