我有一個基類多態性與第3級的繼承基類的shared_ptr
class Base {
public:
virtual void func() = 0;
}
我有一個具體的派生類
class Derived : public Base {
public:
void func() {func2();}
void func2() {};
}
最後,我有一個派生類
class DerivedDerived : public Derived {
// inherits func() from Derived
void func2() {} //Overrides func2() from Derived
}
void g(shared_ptr<Base> s) {
s->func();
}
現在,我的問題是這樣的:我有一個函數g(),需要一個shared_ptr <基地>並且調用func()而沒有任何類型轉換,因爲它不知道任何子類。 現在,如果我做的:
shared_ptr<Base> s1 = make_shared<Derived>();
shared_ptr<Base> s2 = make_shared<DerivedDerived>();
g(s1); //func() of Derived Class called
g(s2); //func2() of Derived Class called inside, func2() of DerivedDerived Class needed to be called inside.
我想正確的類的FUNC()調用FUNC2(),我..
什麼是問題?沒有調用正確的函數嗎?你有構建錯誤嗎?崩潰?意外的結果?請詳細說明。你有*試過嗎?也許你甚至有一個[最小,完整和可驗證的例子](http://stackoverflow.com/help/mcve),你可以告訴我們? –
也讓'Derived :: func2()''virtual'。 – songyuanyao
*「void func2(){} //覆蓋派生」*「中的func2()。不,你只是**隱藏**因爲func2不是'虛擬的'。 – Jarod42