Допускает ли C ++ несколько уровней виртуальности?

У меня есть базовый класс Object. PhysicsObject наследуется от Object. Болл наследуется от PhysicsObject, а SoftBall наследуется от Ball. Примерно так:

Object
 |
PhysicsObject
 |
Ball
 |
SoftBall

У меня есть метод foo (), который объявлен виртуальным в Object (с учетом реализации, а не чисто виртуальным), а затем объявлен и реализован как виртуальный снова в PhysicsObject и Ball. Наконец, SoftBall снова реализует foo (), не объявляя его виртуальным.

Если у меня есть объект *, указывающий на SoftBall, будет ли вызвана версия foo () SoftBall? Если нет, есть ли способ добиться такого эффекта? В принципе, работает ли этот аспект полиморфизма более чем на одном уровне наследования?

8
задан Lewis 22 August 2011 в 18:21
поделиться