Имея
#include <iostream>
using namespace std;
class A {
public:
virtual void foo() {
cout << "A" << endl;
}
};
class B : public A {
public:
void foo() {
cout << "B" << endl;
}
};
class C : public B {
public:
void foo() {
cout << "C" << endl;
}
};
int main() {
C c;
B* b = &c;
b->foo();
return 0;
}
Выходной сигнал C
, но я ожидал B
.
Я не объявлял B::foo()
с помощью модификатора virtual
, поэтому ожидаю, что вызов функции будет определяться статическим типом (без полиморфизма).
Почему C::foo()
вызывается?
Можно ли предоставить не виртуальную функцию в производном классе, который скрывает виртуальную функцию в базе? Какая подпись должна иметь производная функция-член, чтобы b->foo()
называет ее, а не (b->*&A::foo)()