14.12.5 危机
当然,任何向上类型转换都会损失对象的类型信息,如果如下编写:
则编译器只能把ip作为一个Instrument指针处理。这就是,它不能知道ip实际上可能是指向Wind的对象。所以,当调用play()成员函数时,使用
编译器只能知道它正在对于一个Instrument指针调用play(),并调用Instrument∷play()的基本版本,而不是它应该做的调用wind∷play()。这样将会得到不正确的结果。
这是一个重要的问题,将在第15章通过介绍面向对象编程的第三块基石:多态性(在C++中用virtual函数实现)来解决。