📄 subject_50783.htm
字号:
<p>
序号:50783 发表者:ellen_wu 发表日期:2003-08-26 14:33:35
<br>主题:有关((ib*)pia)->fb2();这个问题我还是要再请教一个各位!
<br>内容:#include <iostream><BR> <BR>using namespace std;<BR><BR>class ia<BR>{<BR>public:<BR> virtual fa1()=0;<BR> virtual fa2()=0;<BR>};<BR><BR>class ib<BR>{<BR>public:<BR> virtual fb1()=0;<BR> virtual fb2()=0;<BR> virtual fb3()=0;<BR>};<BR><BR>class ab:public ia,ib<BR>{<BR>public:<BR> virtual fa1();<BR> virtual fa2();<BR><BR> virtual fb1();<BR> virtual fb2();<BR> virtual fb3();<BR>};<BR>#define ff(x) ab::x(){cout<<#x<<endl;return 0;}<BR><BR>ff(fa1)<BR>ff(fa2)<BR>ff(fb1)<BR>ff(fb2)<BR>ff(fb3)<BR><BR><BR>void main()<BR>{<BR> ia * pia= new ab;<BR> //pia ->fa1();<BR> ((ib*)pia)->fb2();<BR>}<BR><BR><BR>“((ib*)pia)->fb2();pia虽然被强制转换成*ib,但是它依然指向ia的虚表,”<BR>——这句我已经理解意思<BR><BR>“当它调用fb2()时,需要偏移2个位置,但是它指向的是ia的虚表,偏移2个位置后调用了fa2()”<BR>——这句不懂,既然指针PIA还是指向IA,那如何通过FB2()来决定这个偏移量的呢?这部分是如何执行的?<BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:toxin 回复日期:2003-08-30 09:30:52
<br>内容:"pia虽然被强制转换成*ib,但是它依然指向ia的虚表,”<BR>不对!pia还是一样,他又没有被赋植.只是(ib*)pia会生成一个临时的指针,该临时指针由ia*类型强制转换为ib*,所以指向的是ib的vtble(指针值偏移而改变)。<BR>可参考:http://www.vclightning.net/list.asp?articleid=2
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -