在基类 animal 的 breathe 函数前添加了 virtual 关键字, 声明该函数为虚函数。
我们注意到, 类的 breathe 函数和 animal fish 在派生类 fish 中重写了 breathe 函
数, 的 breathe 函数完全一样,无论函数名,还是参数列表都是一样的,这称为
函 数的覆盖(override) 。
构成函数覆盖的条件为:
- 基类函数必须是虚函数(使用 virtual 关键字进行声明) 。
- 发生覆盖的两个函数要分别位于派生类和基类中。
- 函数名称与参数列表必须完全相同。
由于 C++的多态性是通过虚函数来实现的, 所以函数的覆盖总是和多态关联 在一起。在函数覆盖的情况下,编译器会在运行时根据对象的实际类型来确定要 调用的函数。