2012-03-13 30 views
2

有沒有什麼辦法可以做以下工作,或者是否有解決方法?我肯定錯過了什麼。C++多態 - 使用基址指針訪問派生函數

class base 
{ 
public: 
    int someInt; 
    virtual void someFunction(){} 
}; 

class derived : public base 
{ 
public: 
    void someFunction(){} 
    void anotherFunction(){} 
}; 

int main (int argc, char * const argv[]) { 

    base* aBasePointer = new derived; 

    aBasePointer->anotherFunction(); 

    delete aBasePointer 

    return 0; 
} 
+1

您需要'anotherFunction()'以便在基礎上虛擬。或者通過指向派生的指針來調用它。目前基地對此功能一無所知。 – BoBTFish 2012-03-13 17:08:59

+0

* real *函數是什麼?你爲什麼想這樣做? – 2012-03-13 17:18:55

+0

它也需要在Base中被虛擬和定義。如果您將新的虛擬功能添加到派生,它並沒有幫助。 – 2012-03-13 19:52:03

回答

7

使用dynamic_cast<>垂頭喪氣的指針派生類(不要忘記測試結果)。

e.g

if ((derived* p = dynamic_cast<derived*>(aBasePointer))) 
{ 
    // p is of type derived. 
    p->anotherFunction(); 
} 
+1

真棒,只是我以後的事情。 – 2012-03-13 18:43:02

2

什麼稔建議將工作,但如果你執行向下轉換,你幾乎可以肯定有一個設計問題。如果你解釋你想達到的目標,也許我們可以提出一個更好的選擇。

-1

這將工作比

int main (int argc, char * const argv[]) { 

    derived* aDerivedPointer = new derived; 

    aDerivedPointer->anotherFunction(); 

    delete aDerivedPointer 

    return 0; 
} 

其他,你需要提供有關你要完成的更多信息。

相關問題