由dynamic_cast引發的多態問題


為了測試dynamic_cast的用法,設計了間單的程序:
#include<iostream>

using namespace std;

class A{};

class B:public A{};

class C:public B{};

int main()
{
  A a;
  B b;
  A *pa = dynamic_cast<A*>(&b);
  if(pa==NULL){cout << "子轉父轉換失敗!" << endl;}
  else cout << pa << endl;
//   C *pc = dynamic_cast<C*>(&b);
//   if(pc==NULL){cout << "父轉子轉換失敗!" << endl;};
  return 0;
}

子轉父成功轉換:

父轉子編譯失敗:

問題如下:
1 dynamic_cast應用應該是與多態和虛函數相關的,但是上面的三個類均沒有虛函數,卻完成了子轉父的轉換,
2 添加了父轉子轉換后程序編譯不通過了,難道不應該是指針返回NULL嗎?

2 个解决方案

#1


變量a和b就和class C沒有關系,你沒看出來嗎?能轉化成功才是問題。。。

#2


引用 1 樓 healer_kx 的回復:
變量a和b就和class C沒有關系,你沒看出來嗎?能轉化成功才是問題。。。

你沒看明白,我測試的就是不成功,但是沒有虛函數的類卻成功了,第二個(后來添加的)我以為失敗了會把指針賦值為NULL卻沒有,反而拋出了警告,

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com