请教 关于DELPHI7下第三方EmbeddedWB控件的使用方法

如题所述

第1个回答  2017-09-10
分析:c.GetData(),首先在C的作用域中查找GetData,没有找到,然后再B中查找,依然没有,最后在A中查找,找到了这个函数。之后参数检查没发生错误则生成调用代码。注意在GetData(成员函数)中调用了doGetData(虚函数)。其实GetData的原型应该是:intGetData(A*this){returnthis->doGetData();}这里通过指针调用虚函数,会发生动态绑定。因为this指向的c(派生类对象),所以要调用C中的虚函数doGetData。那C中有没有这个函数呢?虽然直接没有,但是别忘了C中有继承自B中的虚函数表,也就是调用B中的这个doGetData。之后的c.B::GetData()、c.C::GetData()、c.A::GetData()其实都一样,因为B、C中都没有GetData,所以都是调用的A中的GetData。下面c.doGetData(),由于是通过对象c调用虚函数doGetData,所以不会发生动态绑定。和调用普通函数一样,首先在当前作用域查找doGetData,没有,然后向上在B中找到了,就会调用B中的doGetData(输出1).至于c.B::doGetData()和c.C::doGetData()作用相同,因为在C中没哟doGetData()。