Подтвердить что ты не робот

Вызов переопределенного метода из базового класса

Скажем, у меня есть следующие классы:

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 будет вызван? И этот специфический компилятор?

Спасибо

4b9b3361

Ответ 1

A::foo вызовет B::bar, если у вас есть экземпляр B. Не имеет значения, ссылается ли экземпляр с помощью указателя или ссылки на базовый класс: независимо от этого вызывается версия B; это то, что делает полиморфные вызовы возможными. Поведение не зависит от компилятора: виртуальные функции ведут себя в соответствии со стандартом.