我们还有一个问题需要处理。 (如果,此时你奇怪老有最后一个问题要处理,你将
认识到设计一个虚函数体系的难度。 )我们所做的一切将工作得很好,只要我们不需要在调用碰撞处理函数时进行向基类映射的类型转换。 假设我们开发的这个游戏某些时刻必须区分贸易飞船和军事飞船,我们将对继承体系作如下修改,根据 Item M33的原则,将实体类CommercialShip和MilitaryShip从抽象类SpaceShip继承。

的向上类型映射,你只能采用我们前面讨论的二次虚函数调用的方法(同时也意味着增加新类的时候,所有人都必须重新编译) 。
认识到设计一个虚函数体系的难度。 )我们所做的一切将工作得很好,只要我们不需要在调用碰撞处理函数时进行向基类映射的类型转换。 假设我们开发的这个游戏某些时刻必须区分贸易飞船和军事飞船,我们将对继承体系作如下修改,根据 Item M33的原则,将实体类CommercialShip和MilitaryShip从抽象类SpaceShip继承。
假设贸易飞船和军事飞船在碰撞过程中的行为是一致的。于是,我们期望可以使用相
同的碰撞处理函数(在增加这两类以前就有的那个) 。尤其是,在一个MilitaryShip对象和一个Asteroid对象碰撞时,我们期望调用
GameObject& asteroid);
类型名“MilitaryShip”和“Asteroid”在collisionMap中查找函数时没有找到。虽然MilitaryShip可以被转换为一个SpaceShip,但lookup却不知道这一点。
的向上类型映射,你只能采用我们前面讨论的二次虚函数调用的方法(同时也意味着增加新类的时候,所有人都必须重新编译) 。