(求解)关于c++的覆盖有关问题

(求解)关于c++的覆盖问题
直接上代码:
/*
*Purpose: test
*By 1257650237
*
* Copyright (c) 2014, Archer001@foxmail.com
* All rights reserved.
* 2014.07.22
*/
#include <iostream>
#include <string>

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(int argc, char* argv[])
{
C c(10);
cout<<c.Getdata()<<endl;
cout<<c.A::Getdata()<<endl;
cout<<c.B::Getdata()<<endl;
cout<<c.C::Getdata()<<endl;
cout<<c.doGetData()<<endl;
cout<<c.A::doGetData()<<endl;
cout<<c.B::doGetData()<<endl;
cout<<c.C::doGetData()<<endl;

return 0;
}

输出结果为:
1,1,1,1,1,0,1,1
问题1,其中的c.A::Getdata();c.A这个是什么意义。
问题2,其中为什么c.A::doGetData()结果为0。
------解决方案--------------------

问题1,其中的c.A::Getdata();c.A这个是什么意义。
c.A表示调用c里面的父类A的函数。
问题2,其中为什么c.A::doGetData()结果为0。
因为调用的是类A的doGetData(),返回的自然是A的成员m_data=0了。

------解决方案--------------------
cout<<c.Getdata()<<endl; //最终调用的是虚函数DoGetData,因为B覆写了该函数,因此返回B的m_data(子类的同名成员会覆盖基类的同名成员),也就是1
    cout<<c.A::Getdata()<<endl; //同上
    cout<<c.B::Getdata()<<endl; //同上
    cout<<c.C::Getdata()<<endl; //同上
    cout<<c.doGetData()<<endl; //C没有覆写该函数,仍然调用的父类B的doGetData
    cout<<c.A::doGetData()<<endl; //明确调用A的doGetData,取消多态绑定到B
    cout<<c.B::doGetData()<<endl; //明确调用B的doGetData,参考第一行
    cout<<c.C::doGetData()<<endl; //明确调用C的doGetData,C本身没有覆写,因此编译成对父类B.doGetData()的调用指令。