除繼承之外,還有什麼其他原因需要類具有虛擬功能?cpp繼承問題
運行時發生什麼情況,其中繼承基類並且派生類沒有實現少量的基類函數,而第三個類調用未定義的方法,這些未定義的方法被定義爲基於虛擬的。 seg fault還是會調用基類函數?
如果我不想在我的派生類中的基類中定義所有的函數,但仍然有必要的繼承,我該怎麼辦?
除繼承之外,還有什麼其他原因需要類具有虛擬功能?cpp繼承問題
運行時發生什麼情況,其中繼承基類並且派生類沒有實現少量的基類函數,而第三個類調用未定義的方法,這些未定義的方法被定義爲基於虛擬的。 seg fault還是會調用基類函數?
如果我不想在我的派生類中的基類中定義所有的函數,但仍然有必要的繼承,我該怎麼辦?
除了繼承之外,還有什麼其他的原因需要類具有 作爲虛函數?
如果您沒有處理繼承問題,則沒有合理的用法來使用virtual
函數。兩者都是爲了彼此。
其中一個基類繼承和 派生類沒有實現一些基類的功能和 第三類在運行時會發生什麼調用它們在基礎定義爲虛擬 未定義的方法。 seg fault還是會調用基類函數?
如果派生類不做出關於virtual
功能的任何聲明在它的身上的話,那麼(立即)基類virtual
函數調用派生類對象。另一方面,如果你只是在派生類中聲明virtual
函數,但不定義它,那麼這是一個鏈接器錯誤。沒有分段錯誤。
,我應該怎麼做,如果我不想定義我的派生類在我 基類中的所有功能,但仍然有到位的必要 繼承?
雖然這是不明確的,我會說,你根本就沒有申報/定義在派生類中virtual
功能(你不想要的)。它將使用基類virtual
函數。
如果您沒有重新實現virtual
方法,調用者將調用基類。這是使用繼承IMO的一點。
如果你不想要一個基類來實現虛擬方法,你可以像這樣把它聲明:
class Demo {
void foo() = 0;
};
這就是所謂的抽象類。 請注意,您無法創建此類的實例。從Demo
繼承的任何類必須實現foo()
,否則它也將是一個抽象類,並且因此不可實例化。
關於你回答的最後一個問題,如果它們只是內部執行的函數,那麼使它們變爲私有將阻止它們繼承對嗎? – Rhexis
@Flyphe,no。訪問說明符不能禁止被繼承的函數(即覆蓋)。你仍然可以覆蓋它。如果函數被調用(在派生類對象中),那麼它仍然可以解析爲重寫函數。 [見演示](http://www.ideone.com/3XmWL)。 – iammilind
所以私有變量和函數可以繼承?那麼保護的意義是什麼? – Rhexis