我在虛函數和引用中有一個問題。當我嘗試準備面試時,這是一個難題。我谷歌一段時間,但不能看到確切的情況。參考類型轉換中的C++虛函數
代碼給出如下:
class A{
public:
virtual void foo() {cout << "A::foo" << endl;}
};
class B: public A{
public:
void foo() {cout << "B::foo" << endl;}
};
class C: public B{
public:
void foo() {cout << "C::foo" << endl;}
};
int main(void){
C c;
B *q;
q = &c; q->foo();
return 0;
}
我的想法來的輸出將是B :: foo的,但得到的答覆居然是C :: foo中。有人能告訴我爲什麼vtable不會選擇B的實現嗎?由於
'q'指向'C'的一個實例,所以這就是被調用的'foo'的版本。你可以用你的理由更新你的問題*爲什麼*你認爲輸出是'B :: foo'? – Ayjay
對不起,我應該提到這是在C++中的文章 – wilson100