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” |