2016-03-07 110 views
0

我有類似如下:我可以使用對派生類實例的基類引用初始化派生類引用嗎?

class A { ... }; 
class B : public A { ... }; 

// ... 

B b; 
const A& aref(b); 

// ... 

const B& bref(aref); 

,當我編譯,我得到:現在

no suitable user-defined conversion from "const A" to "const B" exists 

,如果這些都是指針,而不是引用,我會用

bptr = dynamic_cast<B*>(aptr); 

但引用沒有。我該怎麼辦?切換到指針?別的東西?

回答

5

可以使用dynamic_cast爲參考,他們只是拋出一個異常,而不是失敗返回nullptr

try { 
    const B& bref(dynamic_cast<const B&>(aref)); 
} 
catch (const std::bad_cast& e) { 
    //handle error 
} 

如果您絕對知道aref實際上是一個B,那麼你可以做一個static_cast

const B& bref(static_cast<const B&>(aref));