⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_21097.htm

📁 一些关于vc的问答
💻 HTM
字号:
<p>
序号:21097 发表者:天马 发表日期:2002-11-13 17:05:24
<br>主题:雷兄请看
<br>内容:深度探索C++中第四章关于多重继承,看不明白,但雷兄的笔记中也没有提到,现有问题如下:<BR>多重继承时,用第二个基类指向其派生类,要调整THIS指针,但要加的OFFSET无法在编译时期得到,只能在运行时得到。书中给出的<BR>(*BASE2-&gt;VPTR[1].addr)(BASE2+VPTR[1].OFFSET)(BASE2)<BR>(因没带书,记不清了),好像不行呀。<BR>(*BASE2-&gt;VPTR[1].addr)怎么会指向要调用的函数地址呢?
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:雷神 回复日期:2002-11-13 17:38:37
<br>内容:多重继承可以看成是多个单一的继承,但是会产生类成员二义性问题。例如在多重继承后产生的美人鱼实例在内存中会有两个动物的子对象。因此在运行时编译器会做一些工作(调整THIS指针),使这个对象只有一个基类的子对象。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:雷神 回复日期:2002-11-13 17:39:33
<br>内容:类的层次结构<BR>动物为虚拟基类
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:雷神 回复日期:2002-11-13 17:40:26
<br>内容:编译器未作处理时的内存结构
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:雷神 回复日期:2002-11-13 17:41:04
<br>内容:经过编译器处理后
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:天马 回复日期:2002-11-13 20:57:50
<br>内容:雷兄可能误会我的意思了。我刚看了一下书,是161页。<BR>假设:<BR>class derived:base1,base2<BR>{<BR>}<BR>那么,base2 *pbase2=new derived;<BR>编译时会产生以下代码,<BR>derived *temp=new derived;<BR>base2 *pbase2=temp?temp*+sizeof(base1):0;<BR>现在的问题是sizeof(base1)是要加上的offset,<BR>dan&nbsp;&nbsp;
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:天马 回复日期:2002-11-13 21:02:30
<br>内容:但这个offset能在编译时刻决定吗?<BR>下面这个例子可能更清楚一些<BR>FUN(base2 *btmp)<BR>{<BR>}<BR>调用此函数时可能会是:<BR>fun(base2)或fun(derived)<BR>不能确定传进来什么,那么fun函数在编译时,不能确定怎么修改指针?我的理解不知对否。请雷兄指点
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:雷神 回复日期:2002-11-13 22:29:41
<br>内容:噢,书上有说呀<BR>有几种做法<BR>1、扩大虚函数表,使它容纳所有的this指针以及可能的offset.<BR>2、采用Thunk技术。见书<BR>3、将多个虚函数表连锁为一个,指向次表的指针由主表加一个offset获得,来保证每个class只有一个虚函数表。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:雷神 回复日期:2002-11-13 22:31:02
<br>内容:对IBM和微软的解决办法也有提到。可以看看。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:雷神 回复日期:2002-11-13 22:43:48
<br>内容:顺便说一句:天马流星拳。厉害。不过我喜欢紫龙。呵呵
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:天马 回复日期:2002-11-15 11:57:10
<br>内容:刚又看了一遍第五章,终于明白了。顺便看了一下第六章,第七章,感觉写的比三、四章差多了。谢谢雷兄。<BR>不过雷兄有一失算。图片上的不是星矢,而是射手座的艾俄洛斯。呵呵。
<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 + -