# C++ 编程中的公共，受保护和私有继承

> 原文： [https://www.programiz.com/cpp-programming/public-protected-private-inheritance](https://www.programiz.com/cpp-programming/public-protected-private-inheritance)

#### 在本文中，您将学习在 C++ 中使用公共，保护和私有继承。 您将通过示例学习在何处以及如何使用它。

您可以从具有不同访问控制的基类中声明派生的[类](/cpp-programming/object-class "C++ objects")，即公共[继承](/cpp-programming/inheritance "C++ inheritance")，受保护的继承或私有继承。

```cpp
#include <iostream>
using namespace std;

class base
{
.... ... ....
};

class derived : access_specifier base
{
.... ... ....
};

```

**注意**：可以使用`public`，`protected`或`private`关键字代替上述中使用的`access_specifier`术语。

## C++ 中的公共继承，保护继承和私有继承的示例

```cpp
class base 
{
	public:
		int x;
	protected:
		int y;
	private:
		int z;
};

class publicDerived: public base
{
	// x is public
	// y is protected
	// z is not accessible from publicDerived
};

class protectedDerived: protected base
{
	// x is protected
	// y is protected
	// z is not accessible from protectedDerived
};

class privateDerived: private base
{
	// x is private
	// y is private
	// z is not accessible from privateDerived
}

```

在上面的示例中，我们观察到以下内容：

*   `base`具有三个成员变量：`x`，`y`和`z`，它们分别是`public`，`protected`和`private`成员。
*   `publicDerived`继承了变量`x`和`y`为公共变量和受保护变量。`z`不是继承的，因为它是`base`的私有成员变量。
*   `protectedDerived`继承变量`x`和`y`。 这两个变量都被保护。`z`不继承
    如果我们从`protectedDerived`派生一个类`derivedFromProtectedDerived`，则变量`x`和`y`也将继承到派生类。
*   `privateDerived`继承变量`x`和`y`。 这两个变量都变为私有。`z`不继承
    如果我们从`privateDerived`派生类`derivedFromPrivateDerived`，则变量`x`和`y`不被继承，因为它们是`privateDerived`的私有变量。

* * *

### 公共继承中的可见性

| 访问性 | 私有变量 | 受保护变量 | 公共变量 |
| --- | --- | --- | --- |
| 可从自己的类访问？ | 是 | 是 | 是 |
| 可从派生类访问？ | 否 | 是 | 是 |
| 可从二阶派生类访问？ | 否 | 是 | 是 |

* * *

### 受保护继承中的可见性

| 访问性 | 私有变量 | 受保护变量 | 公共变量 |
| --- | --- | --- | --- |
| 可从自己的类访问？ | 是 | 是 | 是 |
| 可从派生类访问？ | 否 | 是 | 是（继承为受保护的变量） |
| 可从二阶派生类访问？ | 否 | 是 | 是 |

* * *

### 私有继承中的可见性

| 访问性 | 私有变量 | 受保护变量 | 公共变量 |
| --- | --- | --- | --- |
| 可从自己的类访问？ | 是 | 是 | 是 |
| 可从派生类访问？ | 否 | 是（继承为私有变量） | 是（继承为私有变量） |
| 可从二阶派生类访问？ | 否 | 否 | 否 |