基类指针转派生类指针问题
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++和面向对象的问题大可不必汇编,反而让问题更复杂了