C++继承

基类与派生类:

1.在原有类的基础上派生出新的类,新类继承原有类的属性和方法,称原有的类为基类, 又称为父类。由已存在的类派生出的新类称为派生类,又称为子类

2.假定有一个类A,要创建一个新类B,它是类A的一个特殊版本。类A就称为基类,类B则称为派生类。类A是父,类B就是子类

单继承和多继承

一个派生类可以从一个基类派生,也可以从多个基类派生。从一个基类派生的继承称为单继承;从多个基类派生的继承称为多继承

继承和派生的基本概念:

  1. 继承允许以现有的类为基础来构建新类
  2. 派生类继承基类的属性和行为
  3. 派生类可以修改继承的属性和行为
  4. 派生类可以增加新的属性和行为
  5. 派生类对象也是基类对象
  6. 派生类对象和基类对象可以被统一管理

继承的作用:
1.便于管理系统中的对象

2.系统扩充比较容易- 利用程序代码的再用性

加快程序发展的速度

减少程序的错误

基类中的私有成员

能被派生类继承

不能被派生类的成员函数直接访问

可通过定义于基类的公有和受保护成员函数访问

派生类的三种继承方式

基类中的成员被派生类继承后成员对外的可见性会有所不同

公有继承(public):特点是基类的公有成员和保护成员作为派生类的成员时,它们都保持原有的状态,而基类的私有成员仍然是私有的。

受保护继承(protected):特点是基类的所有公有成员和保护成员都成为派生类的保护成员,并且只能被它的派生类成员函数或友元访问,基类的私有成员仍然是私有的。

私有继承(private):默认继承方式,特点是基类的公有成员和保护成员都作为派生类的私有成员,并且不能被这个派生类的子类所访问。

三种继承方式的区别

继承关系中构造函数之间的关系

派生类不继承基类的构造函数

派生类和基类的构造函数之间是一种自动调用的关系

创建派生类对象时,派生类构造函数要调用基类的构造函数对基类的数据成员进行初始化

先执行基类构造函数,然后执行派生类构造函数体

基类构造函数需要参数时需要显式调用,格式:

派生类名::派生类名(派生类构造参数表)

:基类(基类构造函数参数表)

基类构造函数不需要参数时(有默认构造函数),隐式调用

继承关系中析构函数之间的关系

派生类不继承基类的析构函数

派生类和基类的析构函数之间是一种自动调用的关系

派生类的析构函数也需要调用基类的析构函数做一些和基类相关的清理工作

继承中构造和析构函数的执行顺序

构造函数的执行顺序

先调用基类的构造函数初始化从基类继承的数据成员

再执行自己的函数体初始化定义于派生类的数据成员

析构函数的执行顺序

派生类的析构函数先执行自己的函数体

再调用基类的析构函数

派生类重定义基类函数

`在派生类中重定义基类的函数

派生类自动继承基类的所有成员

重定义函数的函数原型和基类中被重定义函数的函数原型必须完全相同

基类与派生类成员函数同名可能导致基类的成员函数被隐藏

重定义之后两个函数共存,但调用方法不同

调用基类函数:基类名 + :: + 函数名

调用派生类函数:直接调用

`如果派生类中于出现相同的成员需要编程时注意其存取的范围。不能运用基类的成员函数来设定派生类的数据成员, 而只能在派生类中重新定义存取数据成员的成员函数。

类的层次

一个类可以是某个继承关系中的基类,也可以是另一个继承关系中的派生类

类A派生出类B,类B又派生出类C,则类B是类C的直接基类,类A是类C的间接基类

定义派生类时,直接基类要明确列出,间接基类不用列出

类成员的访问权限(回顾)

在类中,我们是设计师,public, private, protected三种成员可以访问

在对象中,我们是使用者,只有规定的接口public才可以访问;protected, private不能访问

私有成员(private):可以被类自身的成员和友元访问,但不能被包括派生类在内的其他任何类和任何普通函数访问

公有成员(public):可以被任何普通函数和任何类的成员函数访问

保护成员(protected):可以被类自身的成员和友元访问外,还可以被派生类的成员函数访问,但不能被任何非友元的普通函数访问

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值