1. 程式人生 > >當父類指標指向子類物件時的函式呼叫

當父類指標指向子類物件時的函式呼叫

class A
{
public:
 void FuncA()
 {
     printf( "FuncA called\n" );
 }
 virtual void FuncB()
 {
     printf( "FuncB called\n" );
 }
};
class B : public A
{
public:
 void FuncA()
 {
     A::FuncA();
     printf( "FuncAB called\n" );
 }
 virtual void FuncB()
 {
     printf( "FuncBB called\n" );
 }
};
void main( void )
{
 B  b;
 A  *pa;
 pa = &b;
 A *pa2 = new A;
 pa->FuncA(); ( 3)
 pa->FuncB(); ( 4)
 pa2->FuncA(); ( 5)
 pa2->FuncB();
 delete pa2;
}
父類指標指向子類例項物件,呼叫普通重寫函式時,會呼叫父類中的函式。而呼叫被子類重寫虛擬函式時,會呼叫子類中的函式。 再次說明了,子類中被重寫的虛擬函式的執行方式是動態繫結的,與當前指向類例項的父類指標型別無關,僅和類例項物件本身有關。