社区
C语言
帖子详情
slicing(给你我能的最高)
goldboya
2002-12-24 09:46:26
class base{
public:
virtual int a();
};
class derive{
public:
virtual int a();
};
main()
{
derive d();
base b=d;
b.a();//调用的是base::a()吧。为什么?
}
...全文
47
9
打赏
收藏
slicing(给你我能的最高)
class base{ public: virtual int a(); }; class derive{ public: virtual int a(); }; main() { derive d(); base b=d; b.a();//调用的是base::a()吧。为什么? }
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
davidchen1219
2002-12-24
打赏
举报
回复
只有by reference或者by pointer形式才能实现动态联编.
goldboya
2002-12-24
打赏
举报
回复
sorry sorry 是
class derive: public base{
...
};
我的意思是base b=d;
这是有切割。
---------
一开始d的vptr志向vtbl, 而vtbl有derive::a();
但是当b=d(赋值)后,b的vptr的值是d的vptr吗?如果是,那么b 的vtbl是derive::a();然而调用b.a();是base::a();(是吗?);
问题就是:怎样使得b获得他自己的a()(base::a();
Accelerator
2002-12-24
打赏
举报
回复
有点笔误,base *b=d应该写成base *b=&d
Accelerator
2002-12-24
打赏
举报
回复
首先我想说的是你的语句可能没有表达清楚,大概你的原意是从base类中派生出derive类,但是何处表明了派生和继承呢?如果我理解错了你的意思,b=d又是什么意思呢?
误会放在一边。b已经被定义为base的一个实例(instance),因为并没有定义为指针,所以你的虚函数不会在这里起作用。如果我们这样定义:base *b=d。那么语句b->a()就会调用derive::a()。
记住,是用指针。
jsyy
2002-12-24
打赏
举报
回复
你都没有继承关系,何来的多态???
J2eeLearner
2002-12-24
打赏
举报
回复
base b=d; //up-cast
b.a();//调用的是base::a()吧。为什么?
如果你想让多态好用
base &b=d;
goldboya
2002-12-24
打赏
举报
回复
这里如何体现切割
songhonda
2002-12-24
打赏
举报
回复
base b=d;这一句中,由于b声明的是base对象,所以其vptr指向的是base::a(),但是如果base *b=&d,根据多态的原则,b的vptr则指向derive::a()
goldboya
2002-12-24
打赏
举报
回复
这里不是值拷贝吗?
请从内部过程给个说明。谢谢了
Deep Learning with Python 读书笔记 6.27 I 神经网络的数学基础
代码缩进情况,字体重复情况,因为我能看懂,就没改。 里面的每一个字我都看过,加粗 括号 下划线 等均是我的笔记。 要理解深度学习,需要熟悉很多简单的数学概念:张量、张量运算、微分、梯度下降等。 本...
CSDN金牌导师Andy老师精心整理的1000+Java后端面试题,华为od技术一面二面后多久主管面试
这边给大家一个建议,如果你的理想薪资是30K,你完全可以跟HR谈33~35K,而不是一下子就把自己的底牌暴露了出来,不过肯定不能说的这么直接,比如原来你的公司是25K,你可以跟HR讲原来的薪资是多少,你们这边能给到我...
【零散知识点总结2】
大部分知识点来源于网络,知道的可以在评论区贴上来源喔 内容涵盖:MySQL、Spring、Spring Boot、Spring Cloud、RabbitMQ、Kafka...锁定粒度大,发生锁冲突的概率
最高
,并发度最低。 2、行级锁:开销大,加锁慢;会出现
Python 入门指南(一)
原文:zh.annas-archive.org/md5/97bc15629f1b51a0671040c56db61b92 译者:飞龙 协议:CC BY-NC-SA 4.0 前言 这个学习路径帮助你在 Python 的世界中感到舒适。...你将轻松地整合 Python 的面向对象和非面向对象
CSDN金牌导师Andy老师精心整理的1000+Java后端面试题
这份面试题几乎包含了他在一年内遇到的所有面试题以及答案,甚至包括...你只有朝着你的目标一步一步坚持不懈的走下去你才能有机会获得成功!成功只会留给那些有准备的人!一个人可以走的很快,但一群人才能走的更远。
C语言
69,371
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章