2017-09-16 35 views
-1

我有一個基類和派生類,如:相反操作的dynamic_cast

class Base { 
public: 
    Base(); 
    virtual doSomthing(); 
}; 

class Derivative : class Base { 
public: 
    Derivative(); 
    virtual doSomthing(); 
}; 

我知道,如果我想從父親到兒子更改運行時我會做

Derivative& newDer = dynamic_cast<Derivative&>(baseInstance) 

我的問題是我怎麼能做相反的操作 - 從兒子變成父親?

+5

沒有特定的演員操作需要。編譯器自動解決這個問題。 – user0042

+1

您需要這樣做的原因是什麼,派生類具有它的所有屬性。在創建指向基類的指針或引用時,通常會在編譯時發生隱式派生到基本的轉換,但分配派生類。 – Carl

+0

您可以簡單地分配。衍生**是**基地。 – 2017-09-16 14:44:19

回答

2

沒有特定的演員操作需要。任何Derivative&自動可以傳遞一個Base&,如果他們真的有關係,像

class Derivative : public Base { 
       // ^^^^^^ 
public: 
    Derivative(); 
    virtual doSomthing(); 
}; 

認爲你想這樣做從全球範圍public


我的問題是我該怎麼做相反的操作 - 從兒子的變化給父親?

繼承關係需要在所使用的範圍內可訪問。您的示例具有private繼承,並且它不會在public範圍內工作。

As mentioned by @StoryTeller@Peter它將在Derivative內部類範圍與任何類的成員函數或friend ED函數/類工作。

+1

它不必是公共基礎,只能在綁定發生的範圍內訪問。 – StoryTeller

+0

@StoryTeller雖然不能與'private'繼承一起使用。 – user0042

+0

當然是的。任何成員函數都可以將'* this'傳遞給期望'Base&'的函數來命名一個選項。 – StoryTeller