64,646
社区成员
发帖
与我相关
我的任务
分享
class A
{
public:
virtural void fun( void ){ cout << "A"; return; }
};
class B : public A
{
public:
virtual void fun( void ){ cout << "B"; return; }
};
int main( void )
{
A* p = new B;
p -> A::fun( );
return 0;
}
class B {
public :
virtual void f ()
{
}
};
class D : public B
{
public :
void f (){}
};
int main()
{
D d;
B* p = &d;
p->f();
p->B::f();
return 0;
}
p->f();
008B356C mov eax,dword ptr [p]
008B356F mov edx,dword ptr [eax]
008B3571 mov esi,esp
008B3573 mov ecx,dword ptr [p]
008B3576 mov eax,dword ptr [edx]
008B3578 call eax
008B357A cmp esi,esp
008B357C call @ILT+3440(__RTC_CheckEsp) (8B1D75h)
p->B::f();
008B3581 mov ecx,dword ptr [p]
008B3584 call B::f (8B1587h) //直接调用,没有查vtabl
suppresses
the virtual call mechanism. [ Example:class B { public : virtual void f (); };
class D : public B { public : void f (); };
void D::f () { / . . . / B::f ();//等价于this->Base::f() }