Tutorial Study Image

C++ 继承


2023年5月31日, Learn eTutorial
855

本文讨论了C++中的继承概念。此外,它还讨论了各种C++继承类型。当一个类能够从另一个类继承属性时,就称为继承。被继承属性的类称为基类,而继承属性的类称为派生类。

简介

想象一个名为“汽车”的类,其下有“宝马”、“梅赛德斯”等子类。在“汽车”名称下,例如“梅赛德斯”,还有其他称为“车辆型号”的子类。这是理解继承概念的典型示例。

那么,继承到底是什么?

如上例所示,梅赛德斯类继承了汽车类的属性,这种类从另一个类获取属性的能力称为继承。

继承是面向对象编程(OOP)的关键基础之一,它也非常有益。它促进了代码的重用,从而节省了大量时间,使其成为理解编程世界必不可少的一项概念。

类是模板,它定义了特定类型的所有对象所共有的变量和方法。汽车就是一个类,就像上面提到的例子一样。

在继承中,类有两种类别

父类或基类:一个类,从中派生类继承其属性。就像前面提到的例子一样,汽车是一个父类。

子类或派生类:从另一个类继承属性的类称为“子类”或“派生类”。就像前面提到的例子一样,宝马和梅赛德斯属于同一个子类。

使用“:”符号来继承一个类。

在下面的示例中,Car类(子类)从Vehicle类(父类)继承了以下方法和属性:

演示继承的程序


#include <iostream>
#include <string>
using namespace std;

// Base class
class Vehicle {
  public: 
    string brand = "BMW";
    void honk() {
      cout << "hoo, huut! \n" ;
    }
};

// Derived class
class Car: public Vehicle {
  public: 
    string model = "BMW X5";
};

int main() {
  Car myCar;
  myCar.honk();
  cout << myCar.brand + " " + myCar.model;
  return 0;
}

 

输出


hoo, huut! 
BMW BMW X5

C++程序员为何以及何时应该使用继承?

在C++中,继承用于允许我们重用现有类的代码。C++大力提倡重用的理念。重用性也是OOP(面向对象编程)的一个关键方面。

为了节省时间并提高可靠性,总是优先重用已有的东西,而不是试图构建类似但不存在的东西。

在C++中,当我们需要一个类除了拥有自身的属性外,还能使用其超类(父类)的属性,并且这两个类在程序中共享相同的逻辑域时,我们就会使用继承。

例如,有一个名为“Animal”的基类或父类,以及一个名为“Dog”的子类。因为狗是动物,所以“Animal”类的所有公共属性都应该存在于“Dog”类中,同时也要包含狗作为动物的属性。

C++中的继承模式

继承主要有3种模式:

  • 公共模式
  • 保护模式
  • 私有模式
  1. 公共模式

    当子类仅以公共模式从基类或父类派生时,基类或父类的公共成员将在子类中变为公共,基类的保护成员在子类中变为保护。基类的私有成员在派生类中都无法访问。
  2. 保护模式

    当子类在保护模式下从基类或父类派生时,基类的公共成员和保护成员都将在派生类中变为保护。基类的私有成员在派生类中也无法访问,但保护成员可以轻松访问。
  3. 私有模式

    当子类在私有模式下从基类派生时,基类的公共成员和保护成员都将成为派生类中的私有成员,并且基类的私有成员在派生类中不再可访问。

下表列出了上述三种继承类型,并显示了当使用所有三种继承模式时,C++中基类的成员访问说明符。

C++ Inheritance

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

多级继承至少涉及两个类,可能更多。一个新形成的子类成为一个新类的基类,一个类继承其父类的特性。

一个类也可以仅从另一个已经从另一个类派生的类派生。

在下面的示例中,MyGrandChild 是从 MyChild 派生的(MyChild 是从 MyClass 派生的)。

该程序展示了多级继承


#include <iostream>
using namespace std;

// Parent class
class MyClass {
  public: 
    void myFunction() {
      cout << "a few items in the parent class." ;
    }
};

// Child class
class MyChild: public MyClass {
};

// Grandchild class 
class MyGrandChild: public MyChild {
};

int main() {
  MyGrandChild myObj;
  myObj.myFunction();
  return 0;
}

 

输出


a few items in the parent class.

C++中的多重继承是什么意思?

通过使用逗号分隔的列表,一个类可以从多个基类派生。

由于C++的多重继承特性,一个类可以从多个类继承。继承类的构造函数按照它们被继承的顺序调用。

例如,在下面的代码中,构造函数 B 在构造函数 A 之前被调用。

多重继承的程序


#include <iostream>
using namespace std;

// Base class
class MyClass {
  public:
    void myFunction() {
      cout << " content in the parent class.\n" ;
    }
};

// Another base class
class MyOtherClass {
  public:
    void myOtherFunction() {
      cout <<" content with in the another class.\n" ;
    }
};

// Derived class
class MyChildClass: public MyClass, public MyOtherClass {
};

int main() {
  MyChildClass myObj;
  myObj.myFunction();
  myObj.myOtherFunction();
  return 0;
} 

 

输出


content in the parent class.
content with in the another class.

继承的好处包括:

  • 在C++中,继承鼓励代码重用。当派生类继承基类时,派生类可以访问基类的所有功能,并且基类的代码可以在派生类中重用。
  • 由于不必反复编写相同的代码,因此它使代码更易于阅读,并且看起来更简洁。>
  • 由于代码已创建并被继承,因此不必从头开始编写代码可以节省时间。
  • 由于可以轻松地将新类添加到现有类中,因此继承支持可扩展性。