news 2026/7/7 23:56:45

C++ 多继承详情介绍

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++ 多继承详情介绍

C++支持多继承,即允许一个类同时继承多个类。

关于多继承,一直以来争议不断,有一部分人认为多继承会带来大量的问题,为了解决这些问题会使得语言本身变得非常复杂,因此应当避免。另外一派认为多继承在某些场景下可以起到非常关键的作用,应当予以支持。

关于多重继承是好是坏,这是一个非常复杂的问题,网上历来争议不断。因此不过多阐述,感兴趣的同学可以查阅一下相关资料。仅仅从实际支持来看,目前市面上大部分的语言包括Java仅支持单继承,只有C++等少数语言支持多继承。这和C++的理念也有关,即认定不能通过减少语言特性来增强语言的表达力。

看完争议之后,我们来看看究竟什么是多继承呢?

我们来看一段代码案例:

1

2

3

4

5

6

7

8

9

10

11

classA{

public:

voidfuncA();

};

classB{

private:

boolfuncB()const;

};

classC:publicA,publicB{ ... };

在这段代码当中我们定义了两个类A和B,然后我们创建了一个类C,同时继承了A和B。这就是多继承,这里要注意一点,我们必须用关键字public来限定每一个基类,否则的话编译器会默认这是一个私有继承。

如果我们稍微修改一下代码,就会出现一些问题,比如:

1

2

3

4

5

6

7

8

9

10

11

classA{

public:

voidfunc();

};

classB{

private:

boolfunc()const;

};

classC:publicA,publicB{ ... };

在上面这个例子当中A和B都包含了函数func,在下面的执行语句当中会报错。

1

2

C c;

c.func();

虽然B中的func函数是私有的,但对于编译器来说依然是有歧义的。如果想要消除歧义,我们可以这样调用c.A::func()。

当多继承的父类拥有更高的继承层级的时候,可能会出现更复杂的问题,比如多继承菱形。也就是多个类之间的继承关系构成了一个抽象意义上的菱形,

比如我们参考一下C++ Primer中的例子:

在上面这张图当中,SingerWaiter都继承了Worker,而SingingWaiter同时继承了Singer和Waiter。从图上来看,这似乎没什么问题,但在实现上问题不少。

比如说,对于SingingWaiter类来说,它当中包含了多少Worker呢?

答案是有两个,从Singer这边继承了一个Worker,从Waiter又继承了一个Worker。

那么我们这样写就会出现问题:

1

2

SingingWaiter sw;

Worker *p = &sw;

通常这种赋值的时候,会将基类指针设置成派生类中基类对象的地址,但由于sw对象当中包含两个Worker对象,有两个地址,所以也会导致歧义。

我们可以使用强制转换的方式消除歧义:

1

2

3

SingingWaiter sw;

Worker *p = (Singer*) &sw;

Worker *p = (Waiter*) &sw;

但显然这样的方法虽然能够解决问题,

到此这篇关于C++ 多继承详情介绍的文章就介绍到这了

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/7 23:54:19

Web Serial API 与 3 款串口调试工具对比:编码兼容性与数据流处理实测

Web Serial API 与 3 款串口调试工具深度评测:编码兼容性与数据流处理实战指南 1. 串口通信的技术演进与 Web Serial API 的崛起 在物联网和嵌入式设备爆发的时代,串口通信作为最基础的外设交互方式,其技术栈正在经历从传统桌面工具向Web生态…

作者头像 李华
网站建设 2026/7/7 23:46:34

ShuffleNet V1/V2 移动端部署对比:ARM CPU 实测 3 种模型速度与精度

ShuffleNet V1/V2 移动端部署对比:ARM CPU 实测 3 种模型速度与精度 在移动端AI应用开发中,模型的选择往往需要在精度和速度之间寻找平衡。ShuffleNet系列作为专为移动设备设计的轻量级网络,通过创新的架构设计在资源受限的环境中表现出色。本…

作者头像 李华
网站建设 2026/7/7 23:45:32

关于高维数据下的最近邻搜索算法性能分析的技术7

引言高维数据在现代应用中的重要性(如计算机视觉、自然语言处理、推荐系统)最近邻搜索(k-NN)的基本概念与挑战高维数据对传统k-NN算法的性能影响(维度灾难问题)高维数据的特点与挑战维度灾难的定义与数学解…

作者头像 李华
网站建设 2026/7/7 23:39:41

RHEL 8.6 Boot ISO vs DVD ISO 对比:1G与10G镜像的5个关键选择差异

RHEL 8.6 Boot ISO与DVD ISO深度对比:系统管理员必知的5个决策维度当你在数据中心或云环境中部署Red Hat Enterprise Linux 8.6时,第一个关键决策往往被忽视——选择Boot ISO还是DVD ISO?这个看似简单的选择实际上会显著影响后续的安装效率、…

作者头像 李华
网站建设 2026/7/7 23:38:27

ADM部署Qwen 35B:从一键部署到生产级大模型工程实践

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 最近在帮几个团队做本地大模型的技术选型,发现一个很有意思的现象:很多开发者对“一键部署”的理解还停留在“…

作者头像 李华
网站建设 2026/7/7 23:38:26

Claude的脑子里,也长出了一块「意识」

人类的神经科学当中,有一个流传很广的理论叫「全局工作空间理论」。它把大脑比作一堆各自忙自己的专家系统,视觉系统处理视觉,运动系统处理运动,彼此并行,彼此隔离。在Claude模型里,还真的发现了类似人脑的…

作者头像 李华