多继承的详细认识

简介: 多继承的详细认识

目录

前言

多继承和虚基类的概念

声明派生类中多继承的方法

多继承派生类的构造函数和析构函数


前言

之前我们介绍了 C++中的同名成员。以及访问声明。我们也了解了,声明机制可以个别调整私有派生类,从基类继承下来的成员性质以及访问声明中只含不带类型和参数的函数名或变量的访问。下面主要讲解的就是C++中的多基层以及虚基类。

多继承和虚基类的概念

我们前面介绍的单继承就是说一个类是从另一个基类中派生而来。但现实生活中往往有这样一种情况,就是一个派生类中,有两个或者多个基类,那么这个所得的派生类,就可以从两个或者多个基类中继承它所需要的属性,这种方式是非常方便的,它也可以减少C++中代码的重用性,当一个派生类中具有多个基类,那么我们把这种派生方法就称之为多基派生或者叫做多继承,这也是我们要讲解的内容之一。

声明派生类中多继承的方法

在C++中声明多继承的方法与声明单继承的形式相似,只需要将继承的多个基类之间使用逗号分隔开来就可以,下面我们看个例子,它已经声明了类X和类Y,可以声明多重继承的派生类Z

class Z :public X, public Y {
  派生类Z中新增的数据成员和成员函数;
};

以下是声明多继承派生类的一般形式:

class 派生类名:继承方式1 基类名2,继承方式2 基类名1,……继承方式n 基类名n{
    …………
}

在多继承之中,公有继承以及私有继承,对于基类中的成员来说,在派生类中的访问属性,是与单继承的规则是相同的,但是要说明的一点是,对基类成员的访问必须是无二义性的,比如下面的程序是对基类成员访问是二义性的,所以我们要想办法消除二义性

class A {
public:
  int f();
};
class B {
public:
  int f();
  int g();
};
class C : public A, public B {
public:
  int g();
  int h();
};

如定义类C的对象obj:

Z obj;

上述的二义性错误,就是不知道调用的是类A的f()还是类B的f(),我们可以使用成员名限定来消除二义性,如下

obj.X::f();
obj.Y::f();

多继承派生类的构造函数和析构函数

多继承派生类的构造函数定义形式是以单继承构造函数的定义形式是相似的,只不过在初始表中包含多个基类的构造函数,与单继承派生内的构造函数相同,多继承派生类中的各种函数也必须同时负责该派生类中所有基类的构造函数的调用,多继承构造函数中的调用顺序,也是单继承构造函数中的调用顺序是相同的,也是先调用基类中的构造函数,然后再调用对象成员函数中的构造函数,最后才调用派生类中的构造函数这一原则,处于同一层次之下的各个基类之间的构造函数调用顺序,就是取决于声明派生类中所指定的定义各个基类之间的顺序与派生类构造函数中定义的成员初始化列表之中的各样顺序是没有关系的,析构函数的调用顺序恰好是与各种函数的调用顺序相反

相关文章
|
机器学习/深度学习
YOLOv8改进 | 2023注意力篇 | MLCA混合局部通道注意力(轻量化注意力机制)
YOLOv8改进 | 2023注意力篇 | MLCA混合局部通道注意力(轻量化注意力机制)
620 1
|
存储 设计模式 Dart
Flutter笔记:getX库中的GetView中间件
Flutter笔记:getX库中的GetView中间件
587 0
|
JSON 网络协议 机器人
ROSBridge简介以及理解使用(下)
ROSBridge简介以及理解使用(下)
2106 0
|
机器学习/深度学习 人工智能 PyTorch
面向AI Native应用的高效迁移学习策略
【8月更文第1天】随着人工智能技术的发展,越来越多的应用场景需要定制化的AI解决方案。然而,从零开始训练一个深度学习模型往往需要大量的标注数据和计算资源。迁移学习提供了一种有效的方法来解决这个问题,它利用预训练模型的知识,通过少量的数据就能达到很好的性能。本文将深入探讨面向AI Native应用的高效迁移学习策略,并通过实例展示如何针对具体场景进行模型微调。
435 6
面向AI Native应用的高效迁移学习策略
|
XML Java 数据库连接
Spring Boot集成MyBatis
主要系统的讲解了 Spring Boot 集成 MyBatis 的过程,分为基于 xml 形式和基于注解的形式来讲解,通过实际配置手把手讲解了 Spring Boot 中 MyBatis 的使用方式,并针对注解方式,讲解了常见的问题已经解决方式,有很强的实战意义。在实际项目中,建议根据实际情况来确定使用哪种方式,一般 xml 和注解都在用。
|
JavaScript Java 测试技术
基于SpringBoot+Vue的在线图书借阅管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue的在线图书借阅管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
125 1
|
11月前
|
机器学习/深度学习 算法
回归模型的评估及超参数调优
回归模型的评估及超参数调优
243 0
|
机器学习/深度学习 数据采集 算法
Python实现SSA智能麻雀搜索算法优化支持向量机回归模型(SVR算法)项目实战
Python实现SSA智能麻雀搜索算法优化支持向量机回归模型(SVR算法)项目实战
“快捷方式指向的驱动器或网络连接不可用” 解决方法
“快捷方式指向的驱动器或网络连接不可用” 解决方法
|
缓存 算法 测试技术
【软件设计师备考 专题 】如何定义软件需求:系统化的目标、配置、功能、性能和约束
【软件设计师备考 专题 】如何定义软件需求:系统化的目标、配置、功能、性能和约束
447 0

热门文章

最新文章