C++ 继承底层原理总结

一、继承方式

  • 类成员有三种属性,publicprotectedprivate,这三者修饰的类成员的暴露级别是递减的。

  • 继承方式有三种,公有继承、保护继承和私有继承。这三种继承方式都有一个共同的规律,那就是,子类继承父类后,父类的成员在子类中的暴露级别不能超过继承方式指定的暴露级别——原有暴露级别大于指定暴露级别的一律改为指定暴露级别,小于等于指定暴露级别的一律不变。


二、虚函数

  • 继承基类的派生类除了能拥有基类的所有非静态成员之外,还被编译器嵌入了一枚指针,这枚指针指向一个表,我们称这枚指针为虚函数表指针,称这个表为虚函数表。

  • 派生类虚函数表指针指向的虚函数表的内容分为两类,一类是是派生类自身的所有虚函数的入口地址,一类是基类中没有在派生类中定义过的所有虚函数的入口地址。

  • 派生类的虚函数表指针不会被继承。


三、纯虚函数

class Base{
   
public:
    virtual void foo() = 0;
};

foo() 是纯虚函数,Base 是抽象类,不能被实例化,想要发挥作用只能被继承。

继承这个基类的派生类必须定义 foo() 函数。


四、虚继承

  • 虚继承基类的派生类除了能拥有基类的所有非静态成员之外,还被编译器嵌入一枚指针,这枚指针指向一个表,我们称这枚指针为虚基类表指针,称这个表为虚基类表。

  • 在继承集体中该派生类有多少个子类,这个虚基类表就存储着多少个数,每个数是每个基类在该派生类中的偏移地址,派生类利用这些数来找到每个被自己继承的基类在自己的内存空间里的哪个位置。<

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值