估计标题和摘要都说不清楚,先直接用以前的一个demo说明一下多态吧。demo中有一个terrain类,代表地形,地形要做的工作就是调整player和enemy的高度,以便让它们看起来是正确的站在地面上。负责这个工作的函数是CTerrain::Support(param),现在的问题是param的类型。在设定上,无论是terrain->support(player),或者terrain->support(enemy),Support函数内所做的调用是完全相似的。因此,第一直觉是,抽象出player和enemy的基类cast,并将被CTerrain::Support调用的函数写成(纯)虚函数。代码大概是这样子: