2013-04-15 128 views
0

說我有一個繼承類與函數A和B. B做了一些事情,並調用A. 基類也有函數A和B. B以不同的方式做事情,然後調用A(派生類的A)。然而,在特定情況下,我想調用基類的B.這是使用Base :: B()完成的。然後B會打電話給A,我的問題是,它會打電話給A?基礎的還是繼承的?繼承,隱藏函數和範圍C++

回答

2

這取決於A是否是虛擬的。如果虛擬派生版本將被調用,否則它將是基礎版本。

0

您在這裏提出一個通用的場景,但它足以確定您指的是MRO,又名方法解析順序,這是算法(或類算法,你可以使用這個縮寫指一個普通的話題或一個特定的單一事物)用於確定哪種方法需要被調用。

MRO如何在標準中描述的C++情況下工作,但在SO上有一個專用標籤method-resolution-orderan answer,可以給你一個廣泛的觀點。