C++期末复习总结继承

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

  • 继承的种类

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

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

不允许继承循环

不允许继承私有成员

继承的声明

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

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

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

公有继承:

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

私有继承:

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

保护继承:

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

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

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

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

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

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

派生类的析构顺序:

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

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

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

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

多继承的二义性问题:

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

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

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

虚基类的性质:

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

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

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

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

虚基类注意点:

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

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

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

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

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

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

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

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

相关推荐
sz66cm2 小时前
Python基础 -- 使用Python实现ssh终端并实现数据处理与统计功能
开发语言·python·ssh
小灰灰爱代码2 小时前
C++——求3*3矩阵对角元素之和。
数据结构·c++·算法
老K(郭云开)2 小时前
allWebPlugin中间件自定义alert、confirm及prompt使用
c++·chrome·中间件·prompt·html5·edge浏览器
liangbm33 小时前
MATLAB系列02:MATLAB基础
开发语言·数据结构·笔记·matlab·教程·工程基础·高级绘图
change95134 小时前
PHP纯离线搭建(php 8.1.7)
开发语言·php
福鸦4 小时前
详解c++:new和delete
开发语言·c++
qq_172805594 小时前
Go Testify学习与使用
开发语言·golang·go
兩尛5 小时前
java--面向对象编程(中级部分)
java·开发语言
createcrystal5 小时前
《算法笔记》例题解析 第3章入门模拟--3图形输出(9题)2021-03-03
c++·笔记·算法
我要学编程(ಥ_ಥ)5 小时前
双指针算法专题(2)
数据结构·算法·leetcode