((A*)&b)和((A)B)的区别

vship 2004-08-13 11:48:32
class A
{
...
public:
void fun()
{
hello();
}
virtual void hello{...}
...
}

class B:public A
{
...
virtual void hello(){...}
...
}

main()
{
B b;
((A*)&b)->hello();
((A)b).hello();
}

请问((A*)&b)和((A)b)有何本质的区别啊?谢谢
...全文
162 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lingjingqiu 2004-08-13
  • 打赏
  • 举报
回复
UP.
darkstar21cn 2004-08-13
  • 打赏
  • 举报
回复
((A)b)好像会截断——如果B比A的成员多的话;
((A*)&b)只是指针转换,对b不会有影响
RookieStar 2004-08-13
  • 打赏
  • 举报
回复
((A*)&b)->hello(); // 用的是基类指针,向上转型,仍有多态特性

((A)b).hello(); // 强制转换为基类对象,产生了“切割”,不具多态特性
Agemo 2004-08-13
  • 打赏
  • 举报
回复
类型不一样贝
一个是A*
一个是A
flywithdream 2004-08-13
  • 打赏
  • 举报
回复
最主要的区别就是两者的值是不同的,((A*)&b)的结果是A型指针,((A)b)的结果是一个A型对象
renheihei 2004-08-13
  • 打赏
  • 举报
回复
mark
luopengxo 2004-08-13
  • 打赏
  • 举报
回复
多态问题。
lsq2008 2004-08-13
  • 打赏
  • 举报
回复
UP!!

64,649

社区成员

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

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