动态转换类层次结构

时间:2017-11-26 02:13:25

标签: c++ inheritance rtti dynamic-cast null-pointer

我从C ++ Primer(第5版)中读到以下内容:

  

dynamic_cast具有以下形式:

     
      
  1. dynamic_cast< type*>(e)

  2.   
  3. dynamic_cast< type&>(e)

  4.   
  5. dynamic_cast< type&&>(e)

         

    ...

  6.         

    在所有情况下,e的类型必须是从目标类型公开派生的类类型,目标类型的公共基类,或者与目标类型相同。如果e具有这些类型中的一种,则转换将成功。否则,施法失败。

换句话说,作者声称如果e的类型是目标type的基于公共的类,那么演员表会成功,所以我尝试了以下代码:

class Base{
  public:
  virtual void print(){std::cout << "Base" << std::endl;}
};

class type: public Base{
  public:
  virtual void print(){std::cout << "Derived..." << std::endl;}
};

int main(){
    Base* e = new Base;
    std::cout << dynamic_cast<type*>(e); // line 15
}

不幸的是,第15行的动态强制转换失败了(我们得到了一个nullptr),为什么?

0 个答案:

没有答案