请教 关于DELPHI7下第三方EmbeddedWB控件的使用方法
1个回答
2014-12-31
展开全部
分析:
c.GetData(),首先在C的作用域中查找GetData,没有找到,然后再B中查找,依然没有,最后在A中查找,找到了这个函数。之后参数检查没发生错误则生成调用代码。注意在GetData(成员函数)中调用了doGetData(虚函数)。其实GetData的原型应该是:
int GetData(A* this)
{
return this->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()。
c.GetData(),首先在C的作用域中查找GetData,没有找到,然后再B中查找,依然没有,最后在A中查找,找到了这个函数。之后参数检查没发生错误则生成调用代码。注意在GetData(成员函数)中调用了doGetData(虚函数)。其实GetData的原型应该是:
int GetData(A* this)
{
return this->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()。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询