类类型强制转换问题?

weixin_38358875 2018-01-14 05:58:44
看到书上有如下一段代码,定义了两个类,并建立了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的,那么至少应该也会有两个值呀,为啥只打印了一个呢?求大牛指教~~~
...全文
496 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2018-01-15
  • 打赏
  • 举报
回复
《深度探索C++对象模型》 《C++反汇编与逆向分析技术揭秘》
sdghchj 2018-01-15
  • 打赏
  • 举报
回复
对象本身只可能包含有非静态成员变量和虚函数表指针,而成员方法编译后只不过是多加了一个this指针参数的C语言风格的函数而已,成员函数与成员变量并没有存储在一块。
-bootblack- 2018-01-15
  • 打赏
  • 举报
回复
我是新手,我感觉,必须是类继承,这样做才有意义。
真相重于对错 2018-01-14
  • 打赏
  • 举报
回复
你两个类型,没有一点关系,就算转过去,他也访问不到!
www_adintr_com 2018-01-14
  • 打赏
  • 举报
回复
非虚函数的调用时直接调用的, 并不是从对象中去查找函数.

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧