简单类调用如何会这样结果? 如何不符合小弟我之前学的啊

简单类调用怎么会这样结果? 怎么不符合我之前学的啊?
#include <iostream>
using namespace std;
class A
{
public:
int a;
A(){a=1;}
void print(){printf("%d",a);}
protected:
private:
};
class B:public A
{
public:
int a;
B(){a=2;};
protected:
private:
};
int main()
{
B b;
b.print();
printf("%d",b.a);
}


我自己做的 结果为: 22

一看答案是:12.     这不是坑爹吗? 按照我的记忆:B b 应该先执行基类构造,再子类,然后子类a覆盖掉了基类a,这样b.print()应该输出2啊,为什么会是1?  求解释!
------解决方案--------------------
    B类中的变量a没有覆盖掉A类中的变量a,B类对象会有两个变量a,一个是来自于自身的,一个是继承A的
    b.print();    输出的是继承A的变量a
    printf("%d",b.a);    输出的是B类自身声明的变量a
    你可以这样测试一下,b.A::a可以访问到继承A的变量a,而b.a访问到的是B类自身声明的变量a