继承、派生和多态

继承与派生

1.继承

https://www.bilibili.com/video/av3474141/?p=1

  1. B拥有A的全部特点,B可以做派生类,A为基类。

  2. 派生类可对基类进行扩充和修改。

  3. 派生类继承基类的全部成员函数和成员变量,但是派生类的成员函数不能访问基类的私有(private)成员变量。

  4. 写法: class 派生类:public 基类

  5. 举例:学籍管理

  6. 内存空间
    在这里插入图片描述

  7. 派生类对基类成员函数的覆盖(同名同参数表的成员函数)

2.继承关系与复合关系

  1. 继承关系:B是A的派生类,则逻辑上要求一个B对象也是A的对象

  2. 复合关系:类C中有成员变量k,k是类D的对象,则C和D是复合关系。逻辑上要求D对象是C对象的固有属性或组成部分。

在这里插入图片描述
需要定义为友元,便于CCircle访问Cpoint中的私有成员变量。

常见错误:循环定义!编译不通过。

在这里插入图片描述

正确写法:两个类之间通过指针定义成员变量(互相知道)

在这里插入图片描述

3.基类和派生类同名对象和成员函数的情况

在这里插入图片描述

不能访问基类的私有成员变量
在这里插入图片描述

访问范围说明:

  1. 基类的private成员可被基类的成员函数友员函数访问
  2. 基类的public成员可被以下函数访问:
    1. 基类的成员函数
    2. 基类的友员函数
    3. 派生类的成员函数
    4. 派生类的友员函数
    5. 其他函数
  3. 基类的protected成员可被以下函数访问:
    1. 基类的成员函数
    2. 基类的友员函数
    3. 派生类的成员函数可以访问当前对象的基类的保护成员

在这里插入图片描述

4.派生类的构造函数

  1. 执行派生类的构造函数前先执行基类的构造函数

在这里插入图片描述

  1. 调用基类构造函数的两种方式

    1. 显示方式
    2. 隐式方式(不特意声明,调用基类默认的构造函数)
  2. 调用析构函数时先调用派生类的析构函数再调用基类的析构函数

  3. 执行派生类的构造函数之前:调用基类函数的构造函数,初始化被继承的那部分成员变量和成员函数。

5. public继承的赋值兼容规则

  1. 派生类对象可以赋值给基类对象
  2. 派生类对象可以初始化基类引用
  3. 派生类对象的地址可以赋值给基类指针
  4. 若派生方式为private或protected,则上述三条不成立

6. 直接基类和间接基类

定义和构造函数只需要指明直接基类。

多态

提高程序的可扩充性

1. 虚函数和多态在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值