# C++ 中的继承

> 原文： [https://beginnersbook.com/2017/08/cpp-inheritance/](https://beginnersbook.com/2017/08/cpp-inheritance/)

继承是[面向对象编程系统（OOP）](https://beginnersbook.com/2017/08/cpp-oops-concepts/)的特性之一，它允许子类获取父类的属性（数据成员）和函数（成员函数）。

**什么是子类？**

继承另一个类的类称为子类，它也称为派生类。

**什么是父类？**

被其他类继承的类称为父类，超类或基类。

#### 继承语法

```cpp
class parent_class
{
    //Body of parent class
};
class child_class : access_modifier parent_class
{
   //Body of child class
};

```

## 在 C++编程中使用继承有什么好处

继承的主要优点是**代码可重用性**和**可读性**。当子类继承父类的属性和函数时，我们不需要在子类中再次编写相同的代码。这使得重用代码变得更容易，使我们编写更少的代码，代码变得更具可读性。

让我们来看一个**现实生活中的例子**来理解这一点：让我们假设`Human`是一个具有`height`，`weight`，`color`等属性的类，以及诸如`eat()`，`sleep()`，`dream()`，`work()`等函数。

现在我们要创建`Male`和`Female`类，这些类是不同的，但由于男性和女性都是人类，他们共享一些共同的属性和行为（函数），所以他们可以继承`Human`类，其余的那些属性和函数可以单独写在它们的类中。

这种方法使我们编写更少的代码，因为这两个类从基类继承了几个属性和函数，因此我们不需要重写它们。此外，这使得更容易阅读代码。

## 继承示例

在我们讨论继承类型之前，让我们举个例子：

这里我们有两个类`Teacher`和`MathTeacher`，`MathTeacher`类继承了`Teacher`类，这意味着`Teacher`是一个父类，`MathTeacher`是一个子类。子类可以使用父类的属性`collegeName`。

> 另一个要注意的重点是，当我们创建子类的对象时，它调用子类的构造函数，子类构造函数自动调用基类的构造函数。

```cpp
#include <iostream>
using namespace std;
class Teacher {
public:
  Teacher(){
    cout<<"Hey Guys, I am a teacher"<<endl;
  }
  string collegeName = "Beginnersbook";
};
//This class inherits Teacher class
class MathTeacher: public Teacher {
public:
  MathTeacher(){
    cout<<"I am a Math Teacher"<<endl;
  }
  string mainSub = "Math";
  string name = "Negan";
};
int main() {
  MathTeacher obj;
  cout<<"Name: "<<obj.name<<endl;
  cout<<"College Name: "<<obj.collegeName<<endl;
  cout<<"Main Subject: "<<obj.mainSub<<endl;
  return 0;
}
```

**输出：**

```cpp
Hey Guys, I am a teacher
I am a Math Teacher
Name: Negan
College Name: Beginnersbook
Main Subject: Math
```

## C++ 中的继承类型

1）单一继承

2）多级继承

3）多重继承

4）分层继承

5）混合继承

### 单继承

在单继承中，一个类完全继承一个类。

例如：假设我们有`A`类和`B`类.

```cpp
B inherits A
```

**单一继承的例子：**

```cpp
#include <iostream>
using namespace std;
class A {
public:
  A(){
     cout<<"Constructor of A class"<<endl;
  }
};
class B: public A {
public:
  B(){
     cout<<"Constructor of B class";
  }
};
int main() {
   //Creating object of class B
   B obj;
   return 0;
}
```

输出：

```cpp
Constructor of A class
Constructor of B class
```

### 2）多级继承

在这种类型的继承中，一个类继承另一个子类。

```cpp
C inherits B and B inherits A
```

**多级继承示例：**

```cpp
#include <iostream>
using namespace std;
class A {
public:
  A(){
     cout<<"Constructor of A class"<<endl;
  }
};
class B: public A {
public:
  B(){
     cout<<"Constructor of B class"<<endl;
  }
};
class C: public B {
public:
  C(){
     cout<<"Constructor of C class"<<endl;
  }
};
int main() {
  //Creating object of class C
  C obj;
  return 0;
}
```

输出：

```cpp
Constructor of A class
Constructor of B class
Constructor of C class
```

### 多重继承

在多继承中，类可以继承多个类。这意味着在这种类型的继承中，单个子类可以具有多个父类。
例如：

```cpp
C inherits A and B both
```

**多重继承的例子：**

```cpp
#include <iostream>
using namespace std;
class A {
public:
  A(){
     cout<<"Constructor of A class"<<endl;
  }
};
class B {
public:
  B(){
     cout<<"Constructor of B class"<<endl;
  }
};
class C: public A, public B {
public:
  C(){
     cout<<"Constructor of C class"<<endl;
  }
};
int main() {
   //Creating object of class C
   C obj;
   return 0;
}
```

```cpp
Constructor of A class
Constructor of B class
Constructor of C class
```

### 4）分层继承

在这种类型的继承中，一个父类具有多个子类。例如：

```cpp
Class B and C inherits class A
```

**分层继承的例子：**

```cpp
#include <iostream>
using namespace std;
class A {
public:
  A(){
     cout<<"Constructor of A class"<<endl;
  }
};
class B: public A {
public:
  B(){ 
     cout<<"Constructor of B class"<<endl;
  }
};
class C: public A{
public:
  C(){
     cout<<"Constructor of C class"<<endl;
  }
};
int main() {
   //Creating object of class C
   C obj;
   return 0;
}
```

输出：

```cpp
Constructor of A class
Constructor of C class
```

### 5）混合继承

混合继承是多种继承类型的组合。例如，遵循多重和分层继承的子类和父类关系都可以称为混合继承。