c – 动态演员工作在不相关的类型

前端之家收集整理的这篇文章主要介绍了c – 动态演员工作在不相关的类型前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
#include <iostream> 
using namespace std; 
class X{ 
     public: 
     virtual void f(){} 
}; 

class Y { 
     public: 
     virtual void g() {} 
}; 

int main() 
{ 
     X * x = new X(); 
     Y* y = dynamic_cast<Y*>(x); //A 
     // Y* y = static_cast<Y*>(x);  //B 
     cout << y << endl; 
}

A编译而B不.我明白为什么B没有编译,但为什么A得到编译虽然X和Y是完全不相关的类型?

解决方法

这就是为什么在不相关的类型之间允许dynamic_cast:
class X{ 
     public: 
     virtual void f(){} 
}; 

class Y { 
     public: 
     virtual void g() {} 
};

class Z : public X,public Y {};

int main()
{ 
     X* x = new Z(); 
     Y* y = dynamic_cast<Y*>(x); // compiles and yields non-null pointer
}

猜你在找的C&C++相关文章