О следующем коде:О виртуальной функции и наследование
class A {
A * next;
static A* tmp;
public:
A() : next(tmp) {
if (tmp)
tmp->next = this;
tmp = this;
}
virtual void print() {
if (next)
next->print();
}
};
class B : public A {
int a = 1;
public:
void print() {
cout << "foo";
A::print();
}
};
A* A::tmp;
int main(){
B c;
B b;
b.print();
}
Почему next->print();
приводит к B::print()
и не вернулись к A::print()
? Поскольку next
является статическим указателем A
, почему он переходит на функцию B
?
EDIT: добавлено B c;
, что я удалил случайно при публикации.
Это странно, на VS15 это происходит в следующем ... @NathanOliver – shinzou
Я удалил строку, когда я разместил это, теперь это не пусто. @NathanOliver – shinzou
@NathanOliver сейчас: https://ideone.com/qnrfUb – shinzou