支持一个,我也试了试
[CODE]#include<iostream>
#include<fstream>
using namespace std;
class A{public: virtual void a(){}};
class B : public A {};
class C : public A {};
class D{public: virtual void d(){}};
class E : public B, public C, public D {};
int main()
{
C c;
C *pc = dynamic_cast<C*>((D*)&c);
if(pc==0)
cout<<"null"<<endl;
system("pause");
return 0;
}[/CODE]
用gcc的编译器,结果也是null。
我想,类型识别可能是 按照指针或引用的类型,把((D*)&c)看做D类型的指针,不管他以前是什么类型的
C和D的类型没有关系,如果从D到C的dynamic_cast应该是不行的。
[CODE]#include<iostream>
#include<fstream>
using namespace std;
class A{public: virtual void a(){}};
class B : public A {};
class C : public A {};
class D{public: virtual void d(){}};
class E : public B, public C, public D {};
int main()
{
C c;
C *pc = dynamic_cast<C*>((D*)&c);
if(pc==0)
cout<<"null"<<endl;
system("pause");
return 0;
}[/CODE]
用gcc的编译器,结果也是null。
我想,类型识别可能是 按照指针或引用的类型,把((D*)&c)看做D类型的指针,不管他以前是什么类型的
C和D的类型没有关系,如果从D到C的dynamic_cast应该是不行的。