private virtual

谈到 C++ 的多态性,就需要明白什么是重写,然而初学者常常把重写和重载向混淆,所以,再说多态之前先说说重载和重写的区别。其实重载就是编译器通过传入的参数进行正确的函数调用,重写是子类去修改父类方法的过程,所以在程序编译时期编译器就对重载的函数分配了地址空间,为同名的函数做好了区分他们的标记,至于这个标记是 C++ 编译器添加的我们目前不需要知道,而重写是在程序运行期才被决定的。

知道了重载和重写的区别我们再来看看我们标题中的那个 private virtual ,可能在你写的代码中从没有出现过私有的虚函数,反正我是没见过。可能你会问被声明为 private 的虚函数能被重写吗?答案是能。不信就看下面的代码:

 

 

上面的代码在 GCC 4.4.1 上编译通过。这就说明确实可以在子类中重写父类的 private virtual 函数。现在删除主函数中 pt->display() 语句前的注释,再次编译,可以看到有错误,是因为子类不继承父类的 private 方法。既然可以重写 private virtua ,那么我们就可以知道动态绑定取决于是否能重写!

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值