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

前端之家收集整理的这篇文章主要介绍了c – 动态演员工作在不相关的类型前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
  1. #include <iostream>
  2. using namespace std;
  3. class X{
  4. public:
  5. virtual void f(){}
  6. };
  7.  
  8. class Y {
  9. public:
  10. virtual void g() {}
  11. };
  12.  
  13. int main()
  14. {
  15. X * x = new X();
  16. Y* y = dynamic_cast<Y*>(x); //A
  17. // Y* y = static_cast<Y*>(x); //B
  18. cout << y << endl;
  19. }

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

解决方法

这就是为什么在不相关的类型之间允许dynamic_cast:
  1. class X{
  2. public:
  3. virtual void f(){}
  4. };
  5.  
  6. class Y {
  7. public:
  8. virtual void g() {}
  9. };
  10.  
  11. class Z : public X,public Y {};
  12.  
  13. int main()
  14. {
  15. X* x = new Z();
  16. Y* y = dynamic_cast<Y*>(x); // compiles and yields non-null pointer
  17. }

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