Defining Base Class Acess Inheritance

In the previous article Introduction
to Inheritance in C++
we saw how one class can inherit properties and
functions from another, its general form is:



class
derived-class:access-specifier base-class
{
...
...
...
};


We discussed that the access-specifier here, can be anyone of the three private,
public and protected. In this article we’ll discuss the meaning of each
of these in detail.


We know that when a class is derived from another class (base class) then the
members of the base class becomes the members of the derived class. The access-specifier
used while deriving the class specifies the access status of the base class
members inside the derived class.


If we don’t use any base class access-specifier then it’s taken
to be private by default.


Please note that in no case are the private members of the base class be accessible
to the members of its derived class.


So by using different access-specifier we only change the way public and protected
members of a class are inherited inside derived class, since private members
of the base class always remain inaccessible to the members of its derived class.


private:


If we use private access-specifier while deriving a class then both the public
and protected members of the base class are inherited as private members of
the derived class and hence are only accessible to its members.


Following example will illustrate this:



// Introduction to Inheritance
// ----------------------------
// -- THIS PROGRAM WONT RUN --
// ----------------------------
// THIS PROGRAM IS DESIGNED TO
// HAVE ERRORS
#include<iostream.h>

// base class
class base
{
int a;

public:
int b;
void func()
{
cout<<b;
}
};

// derived class is
// inheriting base
// privately
class derived:private base
{
int c;

public:
int d;
void func2()
{
// accessing bases members
cout<<a;// ERROR
// cannot access private
// members of the base class

cout<<b;// CORRECT
func();// CORRECT

// accessing its own
// members
cout<<d;
}
};

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

b.func();// CORRECT

d.func();// ERROR
// cannot access func()
// which is inherited
// as private member of
// the derived class
}



Here all the public members of the base class are inherited in the derived class
as private members. Thus we can’t access the public members of the base
class (b and func()) from the objects of the derived class although they are
accessible to the members of the derived class.


public:


By deriving a class as public, the public members of the base class remains
public members of the derived class and protected members remain protected members.


This is illustrated below:



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

// base class
class base
{
int a;

public:
int b;
void func()
{
cout<<b;
}
};

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

public:
int d;
void func2()
{
// accessing bases memebrs
cout<<a;// ERROR
// cannot access private
// members of the base class

cout<<b;// CORRECT
func();// CORRECT

// accessing its own
// members
cout<<d;
}
};

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

b.func();// CORRECT

d.func();// CORRECT
}


protected:


It makes the derived class to inherit the protected and public members of the
base class as protected members of the derived class.


Protected members of the class and its use will be discussed in the coming
articles.


Related Articles:


Related Posts by Categories

0 komentar:

Posting Komentar