-
-
[求助]虚拟继承时如何从基类到派生类进行指针转换?
-
发表于:
2008-7-12 13:47
5345
-
[求助]虚拟继承时如何从基类到派生类进行指针转换?
class A0
{
int i;
};
class A3 : virtual public A0
{
};
void fn1(A0 a0)
{
printf( "next.\n" );
}
int main(int argc, char* argv[])
{
A0 a0;
A3 a3;
A0* pa0;
A3* pa3;
a0=a3; //这肯定没问题
//a3=a0; 这肯定行不通
pa0=&a3; //这也肯定没问题
pa3=(A3*)(void*)&a0; //可以骗过VC6的编译器 但执行出错 如果不加(void*)则通不过编译
printf("%p\n",&a0); //2个首地址是一样的
printf("%p\n",pa3);
fn1(*pa3); //编译可以 但是执行到这里报错 弹出对话框
return 0;
}
请教一下各位达人:
[1]为什么不用虚拟继承时,pa3=(A3*)&a0;编译和运行都没有问题呢?但只要一上虚拟继承就不可以了,即使加上(void*)也不行?(VC++6.0)
[2]在虚拟继承下,如何让派生类的指针指向基类对象的地址?即把&a0赋值给pa3?
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)