A类对象强制转换成B类后或赋给B类类型的指针变量后,调用同样的函数,是调用A类的还是B类的?

sunsys 2003-11-13 10:36:34
A类对象强制转换成B类后或赋给B类类型的指针变量后,调用同样的函数,是调用A类的还是B类的?
...全文
82 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunsys 2003-11-19
  • 打赏
  • 举报
回复
对呀,我就是问
1。 A类对象强制转换成B类
或者
2。 A类对象的地址赋给B类类型对象的指针变量 后,
调用A和B中都有的相同的函数

对象切片?!何解?
还有 为啥 继承关系,若是虚函数,则应该仍然是A类的呢?
小弟 拜谢了!!!

sunsys 2003-11-19
  • 打赏
  • 举报
回复
zcs001 理解很透彻呀!
多谢指点!
zcs001 2003-11-19
  • 打赏
  • 举报
回复
TO:sunsys
对象切片发生在用 继承类对象给基类对象赋值 或 将继承类对象强制转换成基类对象时;
而如果将 基类对象的指针或引用 指向 派生类对象,就是所谓的向上映射,他们之间的机制
是完全不同的。

从你的问题看,你的基础不是很牢固,请看一看C++编程思想(第一版)的相关章节,你就会很明白的。
noirchloe 2003-11-18
  • 打赏
  • 举报
回复
这种问题也有........
Andy84920 2003-11-18
  • 打赏
  • 举报
回复
调用什么函数-----
看这个函数是否虚拟,是否是类层次关系.
看调用它的是对象还是指向对象的指针或引用.
如果是指针或引用,又应该知道它实际指向或引用的是什么对象.
是否与它的静态类型相同!

当一个指向基类的指针或引用指向(引用)继承类对象.
而所调用的函数又是虚拟的.则会调用继承类的函数实例(如果有重定义的话);
对象只能静态绑定.
datablader 2003-11-18
  • 打赏
  • 举报
回复
调用同样的函数,应该是指A和B中都有的吧,而且,应该指的是有继承关系的类吧。那么,如果是非虚函数,则调用B类的,如果是虚函数,则应该仍然是A类的。
smaxll 2003-11-18
  • 打赏
  • 举报
回复
祖先类不一定是基类吧,还有可能多重继承
zhouqingyuan 2003-11-18
  • 打赏
  • 举报
回复
其实究竟怎么样,自己在机器上试验一下不就知道了吗
sevencat 2003-11-16
  • 打赏
  • 举报
回复
非虚函数链接期就决定了.
虚函数到时候查这个类的虚函数指针表.
Wolf0403 2003-11-16
  • 打赏
  • 举报
回复
祖先类?是说基类吗?
zcs001 2003-11-16
  • 打赏
  • 举报
回复
楼上几位兄弟说的实际上是第二种情况,即将A类对象的地址赋给B类对象的指针.

如果将 A类对象强制转换成B类 分几种情况:
1.B类是A类的祖先类. 此时,将会发生对象切片.此时,无论如何,都将调用B类的函数.关于对象切片的详细描述,清参考C++编程思想(第一版),
2.B类不是A类的祖先类.此时,将 A类对象强制转换成B类对象,将会造成一个编译期错误.

darcymei 2003-11-14
  • 打赏
  • 举报
回复
要看两个类之间是否有继承的关系,没有的话肯定是b类的,静态榜定。
有的话,看函数是否为虚(当然指是基类),不是肯定是b类的,原因同上。
是的话,,动态榜定,查虚函数表得到。
rtdb 2003-11-14
  • 打赏
  • 举报
回复
还有,C++里没事别玩强制转换。
yuantao 2003-11-14
  • 打赏
  • 举报
回复
楼上说的对,得看继承关系,还有你调用的函数是不是虚函数,
如果有继承关系的话,而且函数是虚函数的话,还是调用a类的
如果不是虚函数的话,就调用b类的

64,282

社区成员

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

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