C++ 多层继承

2025 年 8 月 29 日 | 6 分钟阅读

一个类从父类继承属性和特性的能力称为继承。继承是 C++面向对象编程的关键特性之一。继承可以根据派生类和基类之间的关系进行分类。

Multilevel Inheritance in C++

在 C++ 中,多级继承是一种继承类型,其中一个类派生自另一个派生类,形成一个继承链。每个派生类都从其直接基类继承。多级继承遵循单一线性层次结构,例如 A -> B -> C。它支持方法重写,允许派生类重新定义从其父类继承的函数。多级继承类似于祖父、父亲和儿子之间的关系。

语法

它具有以下语法:

在这个语法中,

  • Base_class:它表示程序的基类。
  • Derived_class1:它是一个从基类继承属性和行为的类。
  • Derived_class2:它是一个从 Derived_class1 继承属性和行为的类,从而创建多级结构。
  • Access_specifiers:这些说明符表示该类是 public、private 和 protected。

在多级继承期间,派生类和基类之间的访问说明符在确定基类的哪些成员可在派生类中访问方面起着重要作用。

多级继承的框图

Multilevel Inheritance in C++

如上图所示,类 B 继承了类 A 的属性和行为,类 C 继承了类 B 的属性和行为。

C++ 中多级继承的示例

让我们举一个例子来说明 C++ 中的多级继承。

示例

编译并运行

输出

Appliance is turned on.
Washing clothes...
Smart control via WiFi enabled.

说明

在这个例子中,我们采用了基类 Appliance。它有一个公共函数 powerStatus(),用于打印:“设备已打开。”之后,WashingMachine 类通过公共继承从 Appliance 继承。SmartWashingMachine 类从 WashingMachine 继承。在 main() 方法中,实例化了一个类型为 SmartWashingMachine 的对象 sm。

在函数调用中,sm.powerStatus() 调用 Appliance 类的方法。sm.washClothes() 调用 WashingMachine 类的方法。sm.wifiControl() 调用 SmartWashingMachine 类的方法。

C++ 中的多级继承和构造函数

C++ 构造函数是一种特殊的类成员函数,每当创建类的对象时,它都会自动调用。它用于初始化对象的成员。

示例

编译并运行

输出

Vehicle constructor called.
Car constructor called.
ElectricCar constructor called.
This is a vehicle.
Brand: Generic Car
Battery capacity: 80 kWh

说明

在这个例子中,我们采用了基类 Vehicle,它有一个构造函数和一个函数 type() 来打印消息。每个类都有自己的构造函数和成员函数。当创建 ElectricCar 对象时,构造函数按照继承顺序(从 Vehicle 到 ElectricCar)调用,并且所有继承的方法都可供 ElectricCar 对象访问,这显示了可重用性和层次结构。

为什么我们在 C++ 中使用多级继承?

在 C++ 中,继承提高了代码的可重用性和可读性。它使派生类能够从父类继承属性和特性。它避免了不必要的代码,从而降低了复杂性并使代码更易于理解。

C++ 中的多级继承用于创建类的层次结构。它实现了代码重用并以结构化方式组织类。

多级继承与虚函数(多态性)

让我们举一个例子来说明 C++ 中带有虚函数的多级继承。

示例

编译并运行

输出

Puppy bark

说明

在这个例子中,我们采用了基类 Animal,它包含一个虚函数 sound()。之后,Dog 类扩展 Animal 并重写 sound() 方法以打印“汪汪”。Puppy 类再次重写 sound() 方法以打印“小狗汪汪”。

在 main() 函数中,一个 Animal 类型的指针被分配指向一个 Puppy 对象。当调用 a ->sound() 方法时,调用 Puppy 类的 sound() 方法并打印“小狗汪汪”。这表明动态多态性,其中调用的函数取决于运行时对象的实际类型。

多级继承的优点

C++ 中多级继承的几个优点如下:

  • 代码重用性是 C++ 中多级继承的主要优点。
  • 当我们从其他派生类获取类时,我们可以更容易地创建一个专门的类,而无需重写所有代码。
  • 多级继承还支持 C++ 的多态性和模块化方面。
  • 它有助于提高代码效率、结构和灵活性。

多级继承的缺点

C++ 中多级继承的几个缺点如下:

  • 复杂性增加:类的层次结构变得复杂且难以理解,尤其是在多个级别的情况下,这可能导致代码管理和维护困难。
  • 紧密耦合:派生类与其基类紧密耦合,使得在不影响其他类的情况下更改一个类变得更加困难,从而降低了灵活性。
  • 调试困难:由于存在多个继承级别,跟踪错误变得更加困难,这使得调试过程变得繁琐,并且更难以追溯问题来源。
  • 潜在的继承异常:虽然在多级继承中不如多重继承中常见,但仍然可能出现“菱形问题”等问题,这可能导致歧义和方法解析冲突。

结论

在 C++ 中,多级继承是面向对象编程的一个高级概念,它使一个类能够从派生类继承,从而创建继承层次结构。它有助于实现代码重用、增加模块化和多态性。通过使用构造函数和成员函数,层次结构中的每个级别都可以访问其基类和中间类的功能,从而促进高效且组织良好的代码开发。

C++ 多级继承 MCQ

1) C++ 中的多级继承是什么?

  1. 将多个基类继承到一个类中
  2. 从基类派生一个类,然后将该派生类用作另一个类的基类
  3. 继承类的私有成员
  4. 不使用继承使用多个类
 

答案: b) 从基类派生一个类,然后将该派生类用作另一个类的基类


2) 在以下继承链中,哪个类充当中介类:Vehicle -> Car -> ElectricCar?

  1. Vehicle
  2. ElectricCar
  3. Car
  4. 以上全部。
 

答案: c) Car


3) C++ 中,多级继承除了代码重用外还支持哪个概念?

  1. 仅抽象
  2. 递归
  3. 多态性和模块化
  4. 文件处理
 

答案: c) 多态性和模块化


4) 以下哪项是多级继承的优点?

  1. 代码可重用性
  2. 执行速度慢
  3. 代码重复
  4. 模块化降低
 

答案: a) 代码重用性


5) C++ 中用于定义继承的关键字是什么?

  1. Class
  2. Inherits
  3. 扩展
  4. : (冒号)
 

答案: d) : (冒号)