Inside CLR(深历CLR)

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

例子:

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指向了BC子对象的地址

再看看反过来的情况:

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转换是不安全的.
posted on 2008-02-26 16:58  Wirelesser  阅读(827)  评论(1编辑  收藏  举报