Вызов переопределенного метода из базового класса
Скажем, у меня есть следующие классы:
class A {
public:
virtual void foo() {
bar();
}
protected:
virtual void bar() {
// Do stuff
}
}
class B : public A {
protected:
virtual void bar() {
// Do other stuff
}
}
Если у меня есть экземпляр B и вызывается метод foo, какой метод bar будет вызван? И этот специфический компилятор?
Спасибо
Ответы
Ответ 1
A::foo
вызовет B::bar
, если у вас есть экземпляр B
. Не имеет значения, ссылается ли экземпляр с помощью указателя или ссылки на базовый класс: независимо от этого вызывается версия B
; это то, что делает полиморфные вызовы возможными. Поведение не зависит от компилятора: виртуальные функции ведут себя в соответствии со стандартом.