C++期末复习总结继承

继承是软件复用的一种形式,他是在现有类的基础上建立新类,新类继承了现有类的属性和方法,并且还拥有了其特有的属性和方法,继承的过程称为派生,新建的类称为派生类(子类),原有的成为基类(父类)

  • 继承的种类

单一继承,继承自一个父类

多个继承,继承自多个父类

不允许继承循环

不允许继承私有成员

继承的声明

派生方式关键词 private、public和protected,规定了派生类成员和类外对象访问基类的权限

如果没有写继承方式,默认为private

派生类的生成过程:吸收基类成员(除去私有、构造函数、析构函数)、改造基类成员(同名覆盖)、添加新成员

公有继承:

public,成员访问权限不变,基类的private成员不可被派生访问,只能通过基类的公有和保护成员函数间接访问,基类的protected成员可以直接被派生类访问,但派生类外只能通过派生类的共有或保护成员函数、基类的成员函数访问

私有继承:

基类的公有成员和保护成员,都将以私有被派生类继承,私有在基类中不可直接访问,必须通过基类的公有函数访问,基类的保护和公有只能在派生类内使用

保护继承:

基类的保护和公有成员在派生类中都讲作为保护成员,只能被派生类的成员函数和友元函数访问,基类的私有成员,只能派生类中通过基类的公有和保护成员间接访问

派生类的构造函数与析构函数:

派生类构造函数执行如下:

按照基类的声明顺序调用基类的构造函数,与派生类的初始化列表顺序无关

按照派生类的成员声明顺序,初始化新增成员对象

执行派生类的构造函数题中的内容

派生类的析构顺序:

首先调用派生类的析构函数(清理派生类的新增成员)

如果派生类有成员对象,调用派生类成员对象所在类的析构函数

在调用普通基类的构造函数

最后调用虚基类的构造函数

多继承的二义性问题:

成员限定符解决:对象.父类::变量

成员重定义:在派生类中新增与基类名称相同的成员

虚基类virtual 要虚化的基类的名字

虚基类的性质:

虚基类使得公共基类得派生中只有一个拷贝,改变基类得变量所有子类得到得变量值也改变

虚基类得派生类必须初始化列表给出初始化,若为列出会调用缺省构造函数,所以虚基类必须要有缺省构造函数.

虚基类得初始化是有最远派生类调用其构造函数,若未给出就调用虚基类的缺省构造

若虚基类没有缺省构造,哪每一个派生类得初始化列表都必须对虚基类进行初始化调用

虚基类注意点:

初始化列表中同时出现虚基类和非基类得构造函数调用,虚基类得构造函数优先于非虚基类

虚基类比普通类的运行效率要低

虚基类的最远派生类对其进行初始化

派生类得对象可以赋值给基类得对象

派生类对象可以初始化基类得引用

派生类得对象地址可以赋值给基类得指针

赋值后,派生类对象就可以作为基类的对象使用,但只能使用基类继承的成员

若基是虚函数 则会被重写为派生类的成员

相关推荐
June`24 分钟前
全排列与子集算法精解
算法·leetcode·深度优先
徐先生 @_@|||27 分钟前
Palantir Foundry 五层架构模型详解
开发语言·python·深度学习·算法·机器学习·架构
tang777891 小时前
爬虫如何绕过绕过“5秒盾”Cloudflare:从浏览器指纹模拟到Rust求解之不完全指南
开发语言·爬虫·rust·cloudflare
Yuer20251 小时前
什么是 Rust 语境下的“量化算子”——一个工程对象的最小定义
开发语言·后端·rust·edca os·可控ai
hqwest1 小时前
码上通QT实战26--系统设置01-系统设置布局
开发语言·qt·qss·qt基础控件·qt布局控件·qt表格控件
薛定谔的猫19821 小时前
llama-index Embedding 落地到 RAG 系统
开发语言·人工智能·python·llama-index
夏鹏今天学习了吗1 小时前
【LeetCode热题100(78/100)】爬楼梯
算法·leetcode·职场和发展
玖釉-2 小时前
[Vulkan 学习之路] 08 - 给图片穿马甲:图像视图 (Image Views)
c++·windows·图形渲染
jghhh012 小时前
传递对准MATLAB仿真程序
开发语言·matlab