类类型强制转换问题?
看到书上有如下一段代码,定义了两个类,并建立了A类的实例,然后将地址强制转换为B类类型并赋值给一个B类类型的指针。代码如下:
#include "iostream"
#include "stdio.h"
#include "stdlib.h"
using namespace std;
class A
{
public:
A()
{
m_a=1;
m_b=2;
}
~A(){};
void fun()
{
printf("%d,%d\n",m_a,m_b);
}
private:
int m_a;
int m_b;
};
class B
{
public:
B()
{
m_c=3;
}
~B(){};
void fun()
{
printf("%d\n",m_c);
}
private:
int m_c;
};
int main()
{
A a;
B *pb=(B *)(&a);
pb->fun();
}
编译并执行之后,结果居然是1 。 这里不太明白,对A类进行实例化,虽然对地址进行类型转换,但是对象的成员变量和方法应该都 还是A的,那么至少应该也会有两个值呀,为啥只打印了一个呢?求大牛指教~~~