多重继承中,求基类对象相对子类对象地址偏移的问题,为什么以地址0x```0的时候会失败
enic 2009-12-18 11:02:24 #include <windows.h>
#include <iostream>
using namespace std;
class Base1
{
public:
virtual void f() { }
};
class Base2
{
public:
virtual void f() { }
};
class Base3
{
public:
virtual void f() { }
};
class Drive : public Base1, public Base2, public Base3
{
};
// any non zero value because multiply zero with any no is zero
#define SOME_VALUE 8 // 可以用除了0以外的任何数字,但是为什么就不能用0
int main()
{
// Drive* pd = (Drive*)1; // 欺骗编译器在地址0x00000001出有一个Drive对象
cout<<(DWORD)static_cast<Base1*>((Drive*)SOME_VALUE)-SOME_VALUE<< endl;
cout<<(DWORD)static_cast<Base2*>((Drive*)SOME_VALUE)-SOME_VALUE<< endl;
cout<<(DWORD)static_cast<Base3*>((Drive*)SOME_VALUE)-SOME_VALUE<< endl;
return 0;
}