我對C++中的子類有些懷疑。我有這樣的代碼:強制派生類對象使用自己的函數,而不是基類
class BaseClass() {
BaseClass();
void doSomething();
}
class SubClass : public BaseClass {
SubClass();
void doSomething();
}
當我宣佈一個BaseClass的對象可能是一個子類我做調用子構造...
BaseClass foo = SubClass();
然後,我需要FOO使用DoSomething的()派生類的方法,但當我這樣做...
foo.doSomething();
它使用父類方法,而不是派生的方法。我想這一點,但它不工作:
foo.SubClass::doSomething();
有沒有辦法做到這一點還是我被迫宣佈與「分類」類型的對象,以便能夠使用它自己的功能?
'virtual void doSomething();'? –
'BaseClass foo = SubClass();'''foo'是'BaseClass'類型的對象,而不是'SubClass'。這是**對象切片**的一個例子。並標記'doSomething()'虛擬不會改變這一點。 –
是的,因爲皮特貝克說,它似乎是一個對象切片問題,所以使虛擬函數不能解決問題...解決這個問題的唯一方法是顯式聲明foo爲SubClass類型,不是嗎? – JotaEle