C++ private继承的意义与虚函数表

用effective C++中的话说就是private继承是实现继承。就是class Derivative 想要用class Base的函数接口,但是又不想让别人通过使用Derivative的对象来使用Base的函数接口。这时可以用private继承。或者Base和Derivative根本没有任何逻辑上的联系,单纯的D想要复用一下B的代码,这时就用private 继承。

在一个对象的内存空间中有_vptr指针指向一个虚函数表,表中装有指向虚函数的函数指针,当一个继承了基类的子对象被创建的时候,根据子对象重写基类虚函数的情况构造子对象的虚函数表。若一个基类指针被赋予子类对象,则代码在运行时会根据那个子对象的虚函数表找到被重写了的基类虚函数,再通过寻址操作跳转实现多态,所以动态联编会比静态联编慢很多。在子类对象初始化的时候,子类对象的_vptr先指向父类的虚函数表,并调用父类的构造函数。之后接着调用子类的构造函数,并把_vptr指向子类虚函数表,所以在构造函数中调用虚函数并不会产生多态。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值