如果那個class 本身就是base class 的pointer,不是由derive class pointer cast 過來的,
dynamic_cast 就會 return NULL。
那...他怎麼知道他原來是那一個class pointer ?
所以要RTTI的支援呀!
大意是callprint 會將傳入的point cast 成 child class B。
#include <iostream>
using namespace std;
class A
{
public:
virtual void print() { cout << "A: print" << endl; };
};
class B : public A
{
public:
virtual void print() { cout << "B: print" << endl; };
};
void callprint(A* a)
{
a->print();
B * b = dynamic_cast<B*&t;(a);
if(b)
b->print();
else
cout << " callprint fail " << endl;
}
int main()
{
A* pa = new A;
B* pb = new B;
cout << "now pass A:";
callprint(pa);
cout << "now pass B:";
callprint(pb);
return 0;
}
於是main program 先傳A進去看看他會不會被騙,再傳B進去看看是不是OK.
結果是..
now pass A: A: print
callprint error!
now pass B: B: print
B: print
所以..用dynamic_cast< > 真的可以cast一個base class 到他的derive class喔。
沒有留言:
張貼留言