我在虚函数和引用中有一个问题。当我尝试准备面试时,这是一个难题。我谷歌一段时间,但不能看到确切的情况。参考类型转换中的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