Protected Members of a Class

In the previous article Defining
Base Class Acess (Inheritance)
we noticed that when we derive one class
from a base class then no matter which base class access-specifier we use, the
members of the derived class doesn’t have access to the private members
of the base class.


But what if we want certain members of the base class to be private to the
class and at the same time accessible to the members of the derived class? Is
there any way of doing it?


Yes, it is possible, by declaring those members as protected members of the
base class.


The following example will show you how:



// ----------------------------
// -- THIS PROGRAM WON'T RUN --
// ----------------------------
// THIS PROGRAM IS DESIGNED TO
// HAVE ERRORS
#include<iostream.h>

// base class
class base
{
int a;

protected:
int b;

public:
int c;
};

// 'derived' class is
// inheriting 'base'
// publicly
class derived:public base
{
int d;

public:
void func()
{
cout<<a; //ERROR
// cannot access private
// members of the base class

cout<<b;

cout<<c;
}
};

void main(void)
{
base b;
derived d;

d.func();// CORRECT

cout<<d.b; // ERROR
// cannot access protected
// members

cout<<d.c; //CORRECT
}


Hence we conclude that protected keyword can be used to declare those members
of the class which should be accessible privately to it and at the same time
should be accessible to the members of its derived class.


Related Articles:


Check out this stream