為什么要使用dynamic_cast


1.dynamic_cast為什么要使用?
因為能夠 安全地 將基類指針或引用轉換為派生類的。
為何這樣說呢?
因為如果被綁定的指針不是目標類型的話說dynamic_cast會失敗,對於指針類型的轉換,最佳實踐是在條件中去執行,這樣可以保證轉換和結果測試在一個表達式中進行,從而不可能在測試轉換前不經意地使用派生類指針。

舉例:

if (Derived *pDerived = dynamic_cast<Derived *>pBase) //能夠轉換成功,說明pBase指向的是Derived類型的對象
{
    //使用pDerived指向的派生類對象
}
else//pBase指向的是Base類型的對象
{
    //使用pBase指向的基類對象
}

 

 2.什么時候可以使用dynamic_cast來代替虛函數?

 

3.dynamic_cast使用的場景:

如果你必須做一個非多態的工作在繼承類B和C上,但只能接收基類A,則需要如下的操作:

class A { public: virtual ~A(){} };

class B: public A
{ public: void work4B(){} };

class C: public A
{ public: void work4C(){} };

void non_polymorphic_work(A* ap)
{
  if (B* bp =dynamic_cast<B*>(ap))
    bp->work4B(); 
  if (C* cp =dynamic_cast<C*>(ap))
    cp->work4C(); 
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM