|
C++ Programming Tutorials
Basics of C++
Structure of a
program
Variables
Data types
Constants
Operators
Basic Input/output
Control Structures
Control Structures
Functions (I)
Functions (II)
Compound Data Types
Arrays
Character Sequences
Pointers
Dynamic Memory
Data Structures
Other Data Types
Object Oriented Programming
Classes [I]
Classes [II]
Friendship & Inheritance
Polymorphism
Advanced Concepts
Templates
Namespaces
Exceptions
Type Casting
Preprocessor Directives
C++ Standard Library
Input/output with Files
Soft Skills
Communication Skills
Leadership Skills
.........More
|
|
C++ Programming Tutorials
Inheritance between
classes
A key feature of C++ classes is inheritance. Inheritance allows to
create classes which are derived from other classes, so that they
automatically include some of its "parent's" members, plus its own. For
example, we are going to suppose that we want to declare a series of
classes that describe polygons like our CRectangle, or like CTriangle.
They have certain common properties, such as both can be described by
means of only two sides: height and base.
This could be represented in the world of classes with a class CPolygon
from which we would derive the two other ones: CRectangle and CTriangle.

The class CPolygon would contain members that are common for
both types of polygon. In our case: width and height. And CRectangle and
CTriangle would be its derived classes, with specific features that are
different from one type of polygon to the other.
Classes that are derived from others inherit all the accessible members of the
base class. That means that if a base class includes a member A and we derive it
to another class with another member called B, the derived class will contain
both members A and B.
In order to derive a class from another, we use a colon (:) in the declaration
of the derived class using the following format:
class derived_class_name: public base_class_name
{ /*...*/ };
Where derived_class_name is the name of the derived class and base_class_name is
the name of the class on which it is based. The public access specifier may be
replaced by any one of the other access specifiers protected and private. This
access specifier describes the minimum access level for the members that are
inherited from the base class.
// derived classes
#include <iostream>
using namespace std;
class CPolygon {
protected:
int width, height;
public:
void set_values (int a, int b)
{ width=a; height=b;}
};
class CRectangle: public CPolygon {
public:
int area ()
{ return (width * height); }
};
class CTriangle: public CPolygon {
public:
int area ()
{ return (width * height / 2); }
};
int main () {
CRectangle rect;
CTriangle trgl;
rect.set_values (4,5);
trgl.set_values (4,5);
cout << rect.area() << endl;
cout << trgl.area() << endl;
return 0;
} |
20
10
|
The objects of the classes CRectangle and CTriangle each
contain members inherited from CPolygon. These are: width, height and
set_values().
The protected access specifier is similar to private. Its only difference occurs
in fact with inheritance. When a class inherits from another one, the members of
the derived class can access the protected members inherited from the base
class, but not its private members.
Since we wanted width and height to be accessible from members of the derived
classes CRectangle and CTriangle and not only by members of CPolygon, we have
used protected access instead of private.
We can summarize the different access types according to who can access them in
the following way:
| Access |
public |
protected |
private |
| members of the same class |
yes |
yes |
yes |
| members of derived classes |
yes |
yes |
no |
| not members |
yes |
no |
no |
Where "not members" represent any access from outside the
class, such as from main(), from another class or from a function.
In our example, the members inherited by CRectangle and CTriangle have the same
access permissions as they had in their base class CPolygon:
CPolygon::width
// protected access
CRectangle::width
// protected access
CPolygon::set_values() // public access
CRectangle::set_values() // public access |
This is because we have used the public keyword to define the
inheritance relationship on each of the derived classes:
| class CRectangle: public CPolygon { ... } |
This public keyword after the colon (:) denotes the minimum
access level for all the members inherited from the class that follows it (in
this case CPolygon). Since public is the most accessible level, by specifying
this keyword the derived class will inherit all the members with the same levels
they had in the base class.
If we specify a more restrictive access level like protected, all public members
of the base class are inherited as protected in the derived class. Whereas if we
specify the most restricting of all access levels: private, all the base class
members are inherited as private.
For example, if daughter was a class derived from mother that we defined as:
| class daughter: protected mother; |
This would set protected as the maximum access level for the
members of daughter that it inherited from mother. That is, all members that
were public in mother would become protected in daughter. Of course, this would
not restrict daughter to declare its own public members. That maximum access
level is only set for the members inherited from mother.
If we do not explicitly specify any access level for the inheritance, the
compiler assumes private for classes declared with class keyword and public for
those declared with struct.
NEXT >> Inherited
From the base class
Have a Question ?
post your questions here. It
will be answered as soon as possible.
Check
C Aptitude Questions
for more C Aptitude Interview Questions with Answers
Check
C Interview Questions
for more C Interview Questions with Answers.
|