C++多态的实现原理

在《C++多态的实现原理【转】》里面有这么一句话“首先要调用animal类的构造函数去构造animal类的对象,然后才调用fish类的构造函数完成自身部分的构造,从而拼接... 在《C++多态的实现原理【转】》里面有这么一句话

“首先要调用animal类的构造函数去构造animal类的对象,然后才调用fish类的构造函数完成自身部分的构造,从而拼接出一个完整的fish对象。”
也就是在子类的对象里面会产生两个虚指针吗?一个是父类的构造函数生成时的,一个是子类函数生成时的?为什么我在单步调试的时候只看见一个虚指针捏?
而且,若是两个拼接而成的,那不适用虚函数是不是可以看成是
父对象指针对子对象的截取,只取其继承的部分。

还有个问题是,想问一下,指针只是一个地址,为什么能辨别他指向的结构的元素呢?像这个父指针指向了子对象,为什么不能访问子对象的不是继承而来的函数或元素?
其实这个一直困扰着我!
展开
 我来答
歪瑞顾K
2014-04-18 · TA获得超过2905个赞
知道大有可为答主
回答量:2731
采纳率:33%
帮助的人:2208万
展开全部
C++ 实现多态的方式是 虚函数表

也就是说,如果一个类,哪怕一个成员都没有,如果有继承关系,那么sizeof也可能不为零,因为虚函数表会占一段地方。

就像每个对象都会随身携带一个表,然后调用的时候,去查我这个函数的继承关系中,哪个函数入口是继承关系最底层的。那么选择调用最底层的哪个实现,

说到这里,注意一个容易犯的错,很致命的。
就是去给一个多态的类 进行 memset操作。容易把虚函数表给覆盖了,你想想这个后果
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式