C++繼承中關(guān)于子類構(gòu)造函數(shù)的寫法
? ? 構(gòu)造方法用來初始化類的對(duì)象,與父類的其它成員不同,它不能被子類繼承(子類可以繼承父類所有的成員變量和成員方法,但不繼承父類的構(gòu)造方法)。因此,在創(chuàng)建子類對(duì)象時(shí),為了初始化從父類繼承來的數(shù)據(jù)成員,系統(tǒng)需要調(diào)用其父類的構(gòu)造方法。
? ? 如果沒有顯式的構(gòu)造函數(shù),編譯器會(huì)給一個(gè)默認(rèn)的構(gòu)造函數(shù),并且該默認(rèn)的構(gòu)造函數(shù)僅僅在沒有顯式地聲明構(gòu)造函數(shù)情況下創(chuàng)建。
構(gòu)造原則如下:
? ? 1. 如果子類沒有定義構(gòu)造方法,則調(diào)用父類的無參數(shù)的構(gòu)造方法。
? ? 2. 如果子類定義了構(gòu)造方法,不論是無參數(shù)還是帶參數(shù),在創(chuàng)建子類的對(duì)象的時(shí)候,首先執(zhí)行父類無參數(shù)的構(gòu)造方法,然后執(zhí)行自己的構(gòu)造方法。
? ? 3. 在創(chuàng)建子類對(duì)象時(shí)候,如果子類的構(gòu)造函數(shù)沒有顯示調(diào)用父類的構(gòu)造函數(shù),則會(huì)調(diào)用父類的默認(rèn)無參構(gòu)造函數(shù)。
? ? 4. 在創(chuàng)建子類對(duì)象時(shí)候,如果子類的構(gòu)造函數(shù)沒有顯示調(diào)用父類的構(gòu)造函數(shù)且父類自己提供了無參構(gòu)造函數(shù),則會(huì)調(diào)用父類自己的無參構(gòu)造函數(shù)。
? ? 5. 在創(chuàng)建子類對(duì)象時(shí)候,如果子類的構(gòu)造函數(shù)沒有顯示調(diào)用父類的構(gòu)造函數(shù)且父類只定義了自己的有參構(gòu)造函數(shù),則會(huì)出錯(cuò)(如果父類只有有參數(shù)的構(gòu)造方法,則子類必須顯示調(diào)用此帶參構(gòu)造方法)。
? ? 6. 如果子類調(diào)用父類帶參數(shù)的構(gòu)造方法,需要用初始化父類成員對(duì)象的方式,在子類構(gòu)造函數(shù)中進(jìn)行顯式調(diào)用父類構(gòu)造函數(shù)。