详解虚函数的实现过程之菱形继承修罗场(6)
生活随笔
收集整理的這篇文章主要介紹了
详解虚函数的实现过程之菱形继承修罗场(6)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在這里想跟大家一起來探索一下菱形繼承的類對象如何來執行構造函數,以及析構函數
這展示了子類CSofaBed的構造過程,它的特別之處是在調用時要傳入一個參數,這個參數是一個標志信息。構造函數中要先構造父類,然后構造自己。CSofaBed的兩個父類有一個共同的父類,如果沒有構造標記,它們共同的父類將會被構造兩次,因此要使用構造標記來防止重復構造的問題,構造順序如下:
a.CFurniture
b.CSofa(根據標記跳過CFurniture構造)
c.CBed(根據標記跳過CFurniture構造)
d.CSofaBed自身
CSofaBed也使用了構造標記,當CSofaBed也是父類時,這個標記將產生作用,跳過所有父類的構造,只構造自身。當標記為1時,則構造父親;當標記為0時,則跳過構造函數。
構造時可以使用標記來防止重復構造,同樣也不能出現重復析構錯誤,那么又是如何實現的呢?還是利用標記嗎?下面我們一起來看看
菱形結構中的子類析構函數執行流程并沒有像構造函數那樣使用標記來防止重復析構,而是將祖父類最后調用。先依次執行兩個父類CBed和CSofa的析構函數,然后執行祖父類的析構函數。
總結
以上是生活随笔為你收集整理的详解虚函数的实现过程之菱形继承修罗场(6)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 析构设置为虚函数的原因
- 下一篇: 重游java(猜数和逛街)