先給結論:
(1)派生類中的基類子物件和子物件必須初始化,初始化在派生類的建構函式的初始化列表中,如果初始化列表中沒有進行初始化,則呼叫預設的建構函式進行初始化。
(2)派生類建構函式的呼叫順序:
基類的建構函式
子物件類的建構函式
派生類的建構函式
例子
class point1
;point1::point1()
point1::point1(int i)
point1::~point1()
class point2 : public point1
;point2::point2()
point2::point2(int i,int j,int k)
point2::~point2()
//主函式
void main()
執行結果
point1's default constructor called!// point1 p;呼叫了基類預設建構函式
point1's default constructor called!//
point2's defaule constructor called
point1's default constructor called!// point1 p;呼叫了基類預設建構函式
point1's default constructor called!
point2's constructor called
如果函式
point2::point2(int i,int j,int k)
改為:
point2::point2(int i,int j,int k):p(j)
執行結果為:
point1's default constructor called!
point1's default constructor called!
point2's defaule constructor called
point1's default constructor called!
point1's constructor called!
point2's constructor called
繼承類中的子物件和基類物件的初始
考察下面的程式 class point1 point1 point1 point1 point1 int i point1 point1 class point2 public point1 point2 point2 point2 point2 int i,int j,int k point2 p...
關於c 基類,繼承類,子物件的構造和析構順序
構造和初始化的區別 兩者從意義上而言 1 初始化 乙個變數或者乙個物件在產生的時候就賦予乙個值,屬於伴隨性質 2 賦值 在乙個變數或者乙個物件在產生之後的任意時刻賦予乙個值,屬於任意性質 建構函式 1 函式的名字與類的名字相同 2 在建立乙個物件時,建構函式就自動執行,但是在宣告乙個類的指標物件時,...
C 類和物件的繼承
在前面的章節,我們學會了如何編寫乙個完整的類。然而,物件導向的優勢還沒有被完全體現出來。特別是在編寫一些相似的類時,可能會造成很多的浪費。本章就將以乙個文字遊戲為例,向大家介紹類的繼承問題。在乙個角色扮演類遊戲 rpg 中,可能有各種不同職業的玩家,比如劍士 弓箭手和法師。雖然他們的職業不同,卻有著...