關於下面的代碼:關於虛函數和繼承
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
的函數?
編輯:添加B c;
,我發佈時意外刪除。
這很奇怪,在VS15它確實進入下一個... @NathanOliver – shinzou
我刪除了一行,當我發佈這個,它現在不是空。 @NathanOliver – shinzou
@NathanOliver它現在做:https://ideone.com/qnrfUb – shinzou