首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

基类指针转派生类指针有关问题

2012-03-03 
基类指针转派生类指针问题classb:publicCObject{}classb1:publicb{public:char*kkkk(){return11111 }}

基类指针转派生类指针问题
class   b   :   public   CObject
{};
class   b1   :   public   b  
{
public:
char*   kkkk()
{
return   "11111 ";
}
};

void   CMyDlg::OnBnClickedOk()
{
//   TODO:   在此添加控件通知处理程序代码
b   *bb   =   new   b;
b1   *bb1;


bb1   =   (b1*)bb;
if(bb1)
{
MessageBox(bb1-> kkkk(),   "YYY ",   MB_OK);
}
else
{
MessageBox( "YYY ",   "YYY ",   MB_OK);
}

delete   bb;

}

if测试成功,程序正常!
但是我只new   b,   bb1   只是一个指针为什么   bb1   =   (b1*)bb;   转换后   bb1-> kkkk()
会运行成功??
我看了下反汇编码
bb1   =   (b1*)bb
0041327C     mov                   eax,dword   ptr   [bb]  
0041327F     mov                   dword   ptr   [bb1],eax       就是bb内容直接给了bb1并没有
                                                                                        new一个b1出来.

bb1-> kkkk()的反汇编码则是
00413292     call                 b1::kkkk   (4112BCh)         直接就跳到b1.kkkk过程处了


我只new   b     并没有new   b1   为什么   *b   转成   *b1后可以调用b1::kkkk()???

[解决办法]
还是建议楼主多看些书,像前边有几位说的那样
楼主的汇编一定学的很好吧,不过我觉得要搞清楚这些C++和面向对象的问题大可不必汇编,反而让问题更复杂了

热点排行