为什么孙子类的指针可以强行转换为祖父类的
HRESULT B: QueryInterface(const IID& iid, void** ppv)
{
if(iid==IID_IUnkown)
{
*ppv=(IUnkown*)this; //转换(1) ,孙子类指针转换为祖父类指针
((IUnkown*)(*ppv)->AddRef();
}
else if(iid==IID_OtherInterface)
{
*ppv=(IOtherInterface*)this; //转换是否多余 (2)
((IOtherInterface*)(*ppv)->AddRef();
}
else if(iid== IID_SomeInterface)
{
return m_pUnkownInner->QueryInterface(iid,ppv);
}
else
{
*ppv=NULL;
return E_NONTERFACE;
}
return S_OK;
}
(1)为什么孙子类的指针可以强行转换为祖父类的, 我记得,只可以转换为父亲类的指针吧?
(2) 转换为父亲类的指针后,由于是虚函数,最终还是调用孙子类的 覆盖的虚函数, 所以 对于转换为(2)是否多余?