这两个输出为什么不一样呢(关于类继承和虚函数的有关问题)

这两个输出为什么不一样呢(关于类继承和虚函数的问题)
C/C++ code
#include<iostream>
using namespace std;

class A
{
protected:
    int m_data;
public:
    A(int data=0)
    {
        m_data=data;
    }
    int GetData()
    {
        return doGetData();
    }
    virtual int doGetData()
    {
        return m_data;
    }
};

class B:public A
{
protected:
    int m_data;
public:
    B(int data=1)
    {
        m_data=data;
    }
    int doGetData()
    {
        return m_data;
    }
};

class C:public B
{
protected:
    int m_data;
public:
    C(int data=2)
    {
        m_data=data;
    }
};

int main()
{
    C c(10);
    cout<<c.A::GetData()<<endl;

    cout<<c.A::doGetData()<<endl;
    return 0;
}



输出结果是
1
0

有人能比较具体得解释一下内在的调用机制么?谢谢

------解决方案--------------------
探讨

引用:

引用:

为什么c.A::doGetData() 不可以理解成:
实际类型是c,因为doGetData是虚函数,于是调用c中的doGetData(),c中没有,于是调用B中的doGetData()?

这个已经和类型没关系了,相当于你直接填写了 函数入口地址

为什么第一个有关系,第二个没有呢?区别在什么地方?