C++,为什么只有指针或引用支持多态

这个问题在《深度探索C++对象模型》中,给予了解释:
"一个pointer或一个reference之所以支持多态,是因为它们并不引发内存中任何‘与类型有关的内存委托操作’;会受到改变的,只有它们所指向的内存的‘大小和内容解释方式’而已"。
“当一个base class object被直接初始化为(或是被指定为)一个derived class object时,derived object就会被切割以塞入较小的base type内存中,derived type将没有留下任何蛛丝马迹。多态于是不再呈现,而一个严格的编译器可以在编译时期解析一个‘通过此object而触发的virtual function调用操作’,因而回避virtual机制。如果virtual function 被定义为inline,则更有效率上的大收获”

这两段话可以总结为以下两点:
1.指针和引用类型只是将它们所指向的内存的大小和内容的解释方式改变,与对象的类型无关,相当于把指向的内存解释成了基类的类型。
2.把一个派生类对象直接赋值给基类对象,则对象的类型发生了改变,从而无法实现多态。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值