#include<iostream>
using namespace std;
class A
{
public:
int _a;
A()
{
_a=1;
}
void print()
{
printf("%d\n",_a);
}
};
class B:public A
{
public:
int _a;
B()
{
_a=2;
}
};
int main()
{
B b;
b.print();
printf("%d\n",b._a);
return 0;
}
这段代码输出的结果是
这是因为在继承之后的B类里,A基类的_a和B类的_a同时存在,只是放在不同的空间,显然用b._a访问到的是派生类B的成员,基类的同名成员被覆盖掉。但是由于print函数没有重写,由此将继承A的print函数,输出对应为A的成员值。
倘若在B的public中添加如下代码,即重写print
void print()
{
printf("%d\n",_a);
}
则输出结果为:
假若在进行一次修改,将主函数改为
B b;
printf("%d\n",((A)b)._a);
会怎样呢?
输出结果为:
这说明,对象大的往小的强制转换之后,将指向基类成员。