原文: https://www.programiz.com/cpp-programming/public-protected-private-inheritance
您可以从具有不同访问控制的基类中声明派生的类,即公共继承,受保护的继承或私有继承。
#include <iostream>
using namespace std;
class base
{
.... ... ....
};
class derived : access_specifier base
{
.... ... ....
};
注意:可以使用public,protected或private关键字代替上述中使用的access_specifier术语。
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的私有变量。
| 访问性 | 私有变量 | 受保护变量 | 公共变量 |
|---|---|---|---|
| 可从自己的类访问? | 是 | 是 | 是 |
| 可从派生类访问? | 否 | 是 | 是 |
| 可从二阶派生类访问? | 否 | 是 | 是 |
| 访问性 | 私有变量 | 受保护变量 | 公共变量 |
|---|---|---|---|
| 可从自己的类访问? | 是 | 是 | 是 |
| 可从派生类访问? | 否 | 是 | 是(继承为受保护的变量) |
| 可从二阶派生类访问? | 否 | 是 | 是 |
| 访问性 | 私有变量 | 受保护变量 | 公共变量 |
|---|---|---|---|
| 可从自己的类访问? | 是 | 是 | 是 |
| 可从派生类访问? | 否 | 是(继承为私有变量) | 是(继承为私有变量) |
| 可从二阶派生类访问? | 否 | 否 | 否 |