广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++ 多继承详情介绍
  • 458
分享到

C++ 多继承详情介绍

2024-04-02 19:04:59 458人浏览 安东尼
摘要

c++支持多继承,即允许一个类同时继承多个类。 关于多继承,一直以来争议不断,有一部分人认为多继承会带来大量的问题,为了解决这些问题会使得语言本身变得非常复杂,因此应当避免。另外一派

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

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

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

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

我们来看一段代码案例:

class A{
public:
    void funcA();
};

class B{
private:
    bool funcB() const;
};

class C: public A, public B{ ... };

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

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

class A{
public:
    void func();
};

class B{
private:
    bool func() const;
};

class C: public A, public B{ ... };

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

C c;
c.func();

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

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

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

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

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

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

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

SingingWaiter sw;
Worker *p = &sw;

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

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

SingingWaiter sw;
Worker *p = (Singer*) &sw;
Worker *p = (Waiter*) &sw;

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

到此这篇关于C++ 多继承详情介绍的文章就介绍到这了,更多相关C++ 多继承内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C++ 多继承详情介绍

本文链接: https://www.lsjlt.com/news/140988.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++ 多继承详情介绍
    C++支持多继承,即允许一个类同时继承多个类。 关于多继承,一直以来争议不断,有一部分人认为多继承会带来大量的问题,为了解决这些问题会使得语言本身变得非常复杂,因此应当避免。另外一派...
    99+
    2022-11-13
  • C++继承详细介绍
    在我们进行开发的时候,我们经常会遇到抽象出来的类之间具有继承关系。 举个简单的例子,比如我们在设计某游戏,当中需要定义Human也就是人这个类。每个人有名字,以及一定的血量,能够工作...
    99+
    2022-11-12
  • C++继承与菱形继承详细介绍
    目录继承的概念和定义基类和派生类之间的赋值继承中的作用域派生类的默认成员函数菱形继承继承和组合的区分与联系其余注意事项继承的概念和定义 继承机制是面向对象程序设计的一种实现代码复用的...
    99+
    2022-11-13
  • C/C++中多重继承详解及其作用介绍
    目录概述优缺点优点缺点声明多重继承的方法格式例子二义性两个基类有同名成员基类和派生类有同名成员两个基类从同一个基类派生概述 多重继承 (multiple inheritance): ...
    99+
    2022-11-12
  • C++关于指针,继承和多态介绍
    目录指针指针和继承指针、继承和多态指针 我们在书本上学到的指针基本上都是:首先,指针是一个变量;其次,这个变量存储的值是一个地址。这个是对指针的一个基本理解,最近在编程中发现了一些新...
    99+
    2022-11-12
  • Python类的继承与多态详细介绍
    目录概念类的创建类的继承多态的使用概念 类(Class): 用来描述具有相同的属性和方法的对象的集合。 类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类...
    99+
    2022-11-12
  • C++中继承(inheritance)详解及其作用介绍
    概述 面向对象程序设计中最重要的一个概念是继承 (inheritance). 继承允许我们依据另一个类来定义一个类, 这使得创建和维护一个应用程序变得更统一. 这样做也达到了重用代码...
    99+
    2022-11-12
  • Javascript继承机制的详细介绍
    这篇文章主要介绍“Javascript继承机制的详细介绍”,在日常操作中,相信很多人在Javascript继承机制的详细介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Ja...
    99+
    2022-10-19
  • Kotlin类的继承实现详细介绍
    1.在kotlin中,默认类都是封闭的closed的。如果要让某个类开放继承,必须用open关键字修饰 类中的方法默认也是关闭的。如果需要子类复写父类的方法,也必须用open修饰。 ...
    99+
    2022-11-13
  • C++中多重继承问题及解决方法的介绍
    C++中多重继承问题及解决方法的介绍在C++中,多重继承是一种强大的特性,允许一个类从多个父类派生而来。然而,多重继承也带来了一些问题和挑战,其中最常见的问题是菱形继承问题(Diamond Inheritance Problem)。菱形继承...
    99+
    2023-10-22
    解决方法 (Solutions) 多重继承 (Multiple Inheritance) 问题 (Issues)
  • JavaScript继承方式介绍
    本篇内容介绍了“JavaScript继承方式介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、构造函数...
    99+
    2022-10-19
  • 详解C++中单继承与多继承的使用
    目录前言1.继承的概念和定义(1)继承的概念(2)继承的定义方法(2)继承后子类的成员类型2.基类与派生类的赋值转换(1)派生类赋值给基类(2)基类给派生类3.继承中的作用域(1)隐...
    99+
    2022-11-13
  • java面向对象继承与多态介绍
    目录一.概述  二.继承2.1 继承的概述2.2 继承机制2.3 类中属性,方法的继承与覆盖2.4 super 关键字三. 多态总结一.概述 ...
    99+
    2022-11-12
  • Python的类、继承和多态简单介绍
    这篇文章主要讲解了“Python的类、继承和多态简单介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python的类、继承和多态简单介绍”吧!类的定义假如要定义一个类 Point,表示二维...
    99+
    2023-06-17
  • C++多继承(多重继承)的实现
    在前面的例子中,派生类都只有一个基类,称为单继承(Single Inheritance)。除此之外,C++也支持多继承(Multiple Inheritance),即一个派生类可以有...
    99+
    2023-05-16
    C++多继承 C++多重继承
  • C++ 函数重载详情介绍
    文章转自微信公众号:Coder梁(ID:Coder_LT) 函数重载 函数重载还有一个别名叫函数多态,其实我个人感觉函数多态这个名字更好理解更恰当一些。 函数多态是C++在C语言基础...
    99+
    2022-11-12
  • Java中的继承详情
    目录一. 继承1.1 继承的实现1.2 继承的好处和弊端二. 继承中的成员访问特点2.1 继承中变量的访问特点2.2 super2.3 继承中构造方法的访问特点2.4 继承中成员方法...
    99+
    2022-11-13
  • Swift继承Inheritance浅析介绍
    目录继承(Inheritance)内存结构重写属性重写实例属性重写类型属性属性观察器final继承(Inheritance) 1、值类型(枚举、结构体)不支持继承,只有类支持继承 2...
    99+
    2022-11-13
  • 一篇文章超详细的介绍Java继承
    目录前言继承继承的优点重写和隐藏父类方法重写父类中的方法隐藏父类中的方法方法重写和隐藏后的修饰符子类访问父类私有成员使用super关键字使用super调用父类的无参数构造方法/有参数...
    99+
    2022-11-13
  • Maven继承与聚合详解及作用介绍
    目录一、继承引言1. 继承关系的实现2. 依赖配置二、聚合引言实现聚合三、继承与聚合的合并一、继承 引言 继承关系可以对不同模块的依赖版本做统一管理,因为子模块中的依赖基本都继承于父...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作