14.12.5 危机

当然,任何向上类型转换都会损失对象的类型信息,如果如下编写:

14.12.5 危机 - 图1

则编译器只能把ip作为一个Instrument指针处理。这就是,它不能知道ip实际上可能是指向Wind的对象。所以,当调用play()成员函数时,使用

14.12.5 危机 - 图2

编译器只能知道它正在对于一个Instrument指针调用play(),并调用Instrument∷play()的基本版本,而不是它应该做的调用wind∷play()。这样将会得到不正确的结果。

这是一个重要的问题,将在第15章通过介绍面向对象编程的第三块基石:多态性(在C++中用virtual函数实现)来解决。