class A
{
public:
virtual void show() const
{
ShowMessage( "A" );
}
};
class B
{
public:
virtual void show() const
{
ShowMessage( "B" );
}
};
class AB : public A, public B
{
};
A* a = new AB;
B* b = dynamic_cast< B* >( a );
a->show();
b->show();
delete a;
輸出:“A” “B”
結論:1、用任意基類動態創建子類的指針,可以用dynamic_cast在該子類的任意基類間轉換;
2、當前指針是什么基類類型,則按照該繼承支路去調用虛函數。
深化驗證:
class A
{
public:
virtual void show() const
{
ShowMessage( "A" );
}
};
class B
{
public:
virtual void show() const
{
ShowMessage( "B" );
}
};
class C : public A
{
public:
virtual void show() const
{
ShowMessage( "C" );
}
};
class AB : public B, public C
{
};
C* c = new AB;
A* a = dynamic_cast< A* >( c );
B* b = dynamic_cast< B* >( c );
a->show();
b->show();
delete c;
輸出:“C” “B” |