C++ 类的继承和派生

一:基本概念

  • 基类(父类):已有的类
  • 派生类(子类):新建立的类

派生类是基类的细化,基类是派生类的抽象

二:派生类的声明方式

class 派生类名: private/public 基类名1, private/public 基类名2, ...{
private:
    ...;
public:
    ...;
};

基类名前的private/public叫基类存取限定符,分别是私有继承/共有继承

  • 若基类前不加限定符,缺省为private
  • 友元不能继承

派生类对象所占空间:基类数据成员所占空间总和 + 派生类数据成员所占空间的总和

派生类课访问的成员函数:

  • 基类成员函数 + 派生类成员函数
  • 继承基类的全部数据成员(不一定都可以访问
  • 继承基类除构造函数和析构函数外的全部成员函数(不一定都可以访问

三:派生类的成员访问属性

在这里插入图片描述

公有派生:

  • 基类的private成员被继承,但不可访问
  • 基类的public成员被继承为派生类的public

私有派生:

  • 基类的private成员被继承,但不可访问
  • 基类的public成员被继承为派生类的private

注:不可访问是指不能被直接访问,但可以通过共有函数等形式间接访问

四:保护段与保护继承

在这里插入图片描述

  • protected段的成员对外不可访问,对内可被任意访问(等同于private属性)
  • protected段的成员继承后可被派生类访问
  • protected被private继承后当做派生类的private
  • protected被public继承后当做派生类的protected

在这里插入图片描述

  • 基类的private成员被继承,但不可访问
  • 基类的protected/public成员被继承为派生类的protected

在这里插入图片描述

五:派生类的成员访问属性(支配规则

数据成员同名:

  • 派生类屏蔽基类,通过直接访问的方式可访问派生类的成员,通过加类的作用域符号的方式可访问基类成员

成员函数同名:

  • 不管参数的个数、类型是否完全相同:同数据成员同名处方式

在这里插入图片描述

在这里插入图片描述

六:派生类的构造函数和析构函数

在这里插入图片描述

构造函数的调用顺序:先基类,次子对象,后派生
若派生类的初始化表中不出现基类,则系统自动调用基类的无参构造函数

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

析构函数的调用顺序:与构造函数相反

七:多重继承

在这里插入图片描述

虚基类:针对某个间接基类被多次继承而产生的多个无名对象,从而导致派生类中有多份相同的数据成员拷贝的情况,引入虚基类,使相同基类只保留一份数据成员
在这里插入图片描述

在这里插入图片描述

八:基类与派生类的转换(赋值兼容规则

赋值兼容规则:

  • 在需要基类对象的任何位置,都可以使用公有继承的派生类对象
  • 使用时,将派生类中的基类无名实例对象对应空间拷贝给基类,其余部分丢弃
  • 当基类中包含动态申请内存时,赋值兼容规则可能会出错

在这里插入图片描述

"任何位置"主要包括:

  • 派生类对象可初始化基类的对象或引用
  • 派生类对象可出现在函数参数/返回值为基类的地方
  • 派生类对象可赋值给基类
  • 派生类对象的指针可出现在基类指针出现的位置

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值