例子:
class A
{
int ai;
};
class C
{
int ci;
};
class B:public A,public C
{
int bi;
};
int _tmain(int argc, _TCHAR* argv[])
{
B b;
A *pa = &b;
C *pc = &b;
return 0;
}
可以看到:pa指向了B中的A子对象的地址,而pc指向了B中C子对象的地址
再看看反过来的情况:
Main()中
A a;
A a_tmp;
C c;
a.ai=3;
a_tmp.ai=4;
c.ci=5;
B *pba = static_cast<B*>(&a);//必须用static_cast或强制转换,否则无法通过编译
B *pbc = static_cast<B*>(&c);//same
return 0;
}
可以看到这样强制转换之后 pba 中的 C 子对象实际上指向了 a_tmp ,所以说用 down_cast 转换是不安全的 .