关于转型动作,我的理解对不对啊?
有这么一段程序:
#include <typeinfo>
#include <iostream.h>
#include <vcl.h>
#pragma hdrstop
//------------------------------------------
#pragma argsused
class d1{
public:
virtual void foo(){}
};
class d2{
public:
virtual void bar(){}
};
class mi:public d1,public d2{};
class mi2:public mi{};
int main(int argc, char* argv[])
{
using namespace std;
d2* D2=new mi2;
mi2* MI2=dynamic_cast<mi2*>(D2);//成功
if(MI2)cout<<"MI2 succeed!"<<endl;
d1*D1=dynamic_cast<d1*>(D2);//成功
if(D1)cout<<"D1 Succeed!"<<endl;
if(typeid(*D2)==typeid(mi2))cout<<"typeid to mi2 succeed!"<<endl;//成功
else if(typeid(*D2)==typeid(mi))cout<<"typeid to mi succeed!"<<endl;//失败
else if(typeid(*D2)==typeid(d2))cout<<"typeid to d2 succeed!"<<endl;//失败
cin.get();
return 0;
}
我的理解是:
由于D2实际上是指向mi2类型对象的,所以D2可以向下转型,所以typeid(*D2)返回的typeinfo对象只能与typeid(mi2)匹配,这就是为什么上面有的会成功,有的会失败的真正原因。
问题点数:0、回复次数:3Top
1 楼ruanyuping()回复于 2003-09-03 12:06:26 得分 0
upTop
2 楼xueweizhong(薛卫忠)回复于 2003-09-03 13:48:36 得分 0
typeid(obj) 返回的是most_derived_object的type的typeinfo,你的理解是正确的。Top
3 楼tarsen(Carry)回复于 2003-09-04 20:33:37 得分 0
谢谢鼓励
Top




