派生类对象包含一个基类子对象,换言之,每个派生类对象也是基类对象。
class Box;
class Carton : public Box
{
// something 1
};
class ToughPack: public Box
{
// something 2
};
Carton carton {};
Box* pBox {&carton};
ToughPack hardcase {};
pBox = &hardcase;
指针pBox可以包含任何以Box为基类的类对象的地址。该指针的类型Box* 被称为静态类型,因为pBox是指向基类的指针,所以它也具有动态类型,它会根据指向的对象类型而变化。
当pBox指向Carton对象时,其动态类型就是“指向Carton对象的指针”;
当pBox指向ToughPack 对象时,其动态类型就是“指向ToughPack 对象的指针”;
在pBox指向Box类型的对象时,其动态类型就与静态类型相同,这就是多态性。