🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 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`的私有变量。 * * * ### 公共继承中的可见性 | 访问性 | 私有变量 | 受保护变量 | 公共变量 | | --- | --- | --- | --- | | 可从自己的类访问? | 是 | 是 | 是 | | 可从派生类访问? | 否 | 是 | 是 | | 可从二阶派生类访问? | 否 | 是 | 是 | * * * ### 受保护继承中的可见性 | 访问性 | 私有变量 | 受保护变量 | 公共变量 | | --- | --- | --- | --- | | 可从自己的类访问? | 是 | 是 | 是 | | 可从派生类访问? | 否 | 是 | 是(继承为受保护的变量) | | 可从二阶派生类访问? | 否 | 是 | 是 | * * * ### 私有继承中的可见性 | 访问性 | 私有变量 | 受保护变量 | 公共变量 | | --- | --- | --- | --- | | 可从自己的类访问? | 是 | 是 | 是 | | 可从派生类访问? | 否 | 是(继承为私有变量) | 是(继承为私有变量) | | 可从二阶派生类访问? | 否 | 否 | 否 |