Public, Protected and Private Inheritance in C++ Programming
In this article, you'll learn to use public, protected and private inheritance in C++. You'll learn where and how it is used, with examples.

You can declare a derived class from a base class with different access control, i.e., public inheritance, protected inheritance or private inheritance.
#include <iostream>
using namespace std;
class base
{
.... ... ....
};
class derived : access_specifier base
{
.... ... ....
};
Note: Either
public,
protected or
private keyword is used in place of
access_specifierterm used in the above code.
Example of public, protected and private inheritance in C++
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
}
In the above example, we observe the following things:
base has three member variables: x, y and z which are public, protected and private member respectively.
publicDerived inherits variables x and y as public and protected. z is not inherited as it is a private member variable of base.
protectedDerived inherits variables x and y. Both variables become protected. z is not inherited
If we derive a class derivedFromProtectedDerived from protectedDerived, variables x and y are also inherited to the derived class.
privateDerived inherits variables x and y. Both variables become private. z is not inherited
If we derive a class derivedFromPrivateDerived from privateDerived, variables x and y are not inherited because they are private variables of privateDerived.
Accessibility in Public Inheritance
| Accessibility |
private variables |
protected variables |
public variables |
| Accessible from own class? |
yes |
yes |
yes |
| Accessible from derived class? |
no |
yes |
yes |
| Accessible from 2nd derived class? |
no |
yes |
yes |
Accessibility in Protected Inheritance
| Accessibility |
private variables |
protected variables |
public variables |
| Accessible from own class? |
yes |
yes |
yes |
| Accessible from derived class? |
no |
yes |
yes
(inherited as protected variables) |
| Accessible from 2nd derived class? |
no |
yes |
yes |
Accessibility in Private Inheritance
| Accessibility |
private variables |
protected variables |
public variables |
| Accessible from own class? |
yes |
yes |
yes |
| Accessible from derived class? |
no |
yes
(inherited as private variables) |
yes
(inherited as private variables) |
| Accessible from 2nd derived class? |
no |
no |
no |