子類不能繼承父類的函式有哪些

2021-09-22 16:46:35 字數 1062 閱讀 2654

但是乙個派生類的指標可以安全地轉化為乙個基類的指標。這樣刪除乙個基類的指標的時候,c++不管這個指標指向乙個基類物件還是乙個派生類的物件,呼叫的都是基類的析構函式而不是派生類的。如果你依賴於派生類的析構函式的**來釋放資源,而沒有過載析構函式,那麼會有資源洩漏。所以建議的方式是將析構函式宣告為虛函式。

也就是delete a的時候,也會執行派生類的析構函式。

乙個函式一旦宣告為虛函式,那麼不管你是否加上virtual 修飾符,它在所有派生類中都成為虛函式。但是由於理解明確起見,建議的方式還是加上virtual 修飾符。

構造方法用來初始化類的物件,與父類的其它成員不同,它不能被子類繼承(子類可以繼承父類所有的成員變數和成員方法,但不繼承父類的構造方法)。因此,在建立子類物件時,為了初始化從父類繼承來的資料成員,系統需要呼叫其父類的構造方法。

如果沒有顯式的建構函式,編譯器會給乙個預設的建構函式,並且該預設的建構函式僅僅在沒有顯式地宣告建構函式情況下建立。

構造原則如下:

1. 如果子類沒有定義構造方法,則呼叫父類的無引數的構造方法。

2. 如果子類定義了構造方法,不論是無引數還是帶引數,在建立子類的物件的時候,首先執行父類無引數的構造方法,然後執行自己的構造方法。

3. 在建立子類物件時候,如果子類的建構函式沒有顯示呼叫父類的建構函式,則會呼叫父類的預設無參建構函式。

4. 在建立子類物件時候,如果子類的建構函式沒有顯示呼叫父類的建構函式且父類自己提供了無參建構函式,則會呼叫父類自己的無參建構函式。

5. 在建立子類物件時候,如果子類的建構函式沒有顯示呼叫父類的建構函式且父類只定義了自己的有參建構函式,則會出錯(如果父類只有有引數的構造方法,則子類必須顯示呼叫此帶參構造方法)。

6. 如果子類呼叫父類帶引數的構造方法,需要用初始化父類成員物件的方式,比如:12

3456

78910

1112

1314

1516

1718

1920

2122

#include

classanimal

};classfish:publicanimal

};voidmain()

子類繼承父類,必須宣告父類的建構函式

class entity def init self,object type print parent class init called self.object type object type def get context length self raise exception get con...

子類繼承父類的虛函式呼叫

父類 father 子類 son 1.father fa new son 例項1 includeusing namespace std class father void watchtv virtual void say class son public father void watchtv vo...

理解父類構造方法不能被子類繼承

constructor constructor aclass.getconstructor context.class,viewgroup.class aclass extends bclass 注意 通過實驗證明,父類的構造方法 不能被子類繼承,例如bclass 有構造方法 b context,v...