(Это довольно странный вопрос. Я бы предпочел, чтобы кто-то спросил, почему во втором случае Derived::foo
не вызывается.)
В языке C ++, какая версия виртуальной функции вызывается, полностью не зависитчто было и что не было "разыменовано".Разыменование не имеет значения вообще.Единственное, что имеет значение, это динамический тип объекта, используемого в вызове.
В первом случае вызывается Derived::foo
, поскольку динамический тип объекта *obj
равен Derived
.
Во втором случае динамический тип obj1
равен Base
, поэтому вызывается Base::foo
.
Другими словами, все работает, как ожидалось.Это заставляет задуматься, что Ват заставил тебя задать свой вопрос.Что заставило вас ожидать чего-то другого?