<< Chapter < Page Chapter >> Page >

Figure below shows a simple inheritance hierarchy. A typical company has hundreds of persons. An important subset of these persons is a set of employees. Employees are either workers or secretaries.

Person class hierarchy

Each class in a class hierarchy cumulatively inherits the class members of all classes that precede it in the hierarchy chain.

A class that directly precedes another class in a class hierarchy, and is included in the derived class’s base list, is called the direct base class.

A class that does not directly precede another class in a class hierarchy, and that not included in the derived class’s base list, is called the indirect base class.

Access specifiers and inheritance

Even though a derived class inherits the class members of a base class, the base class’s members are still bound by its access specifiers.

Private class members in the base class can be accessed only the base class’s member functions.

For example, the idNum data member in the Person class is private. If you write the following member function in the Customer class, which attempts to directly access to the idNum data member, you will get a compiler error.

void Customer::outputBalDue(){

cout<<“ ID #”<<idNum<<“ Balance due $”<<balanceDue<<endl;

}

Instead, to access the idNum data member you must call the Person class’s outputData() member function, which is public. Alternatively, you can declare the idNum data member with the protected access specifier.

The protected access modifier restricts class member access to

  1. the class itself
  2. to classes derived from the class, or

The following code shows a modified version of the Person class declaration in which the private access modifier has been changed to protected.

Example:

class Person {

protected:

int idNum;

char lastName[20];

char firstName[15];

public:

void setFields(int num, char last[], char first[]);

void outputData();

};

A member function in Customer class that attempts to directly access to the idNum data member will work correctly since the Customer class is a derived class of the Person class and the idNum data member is now declared as protected.

Overriding base class member functions

Derived classes are not required to use a base class’s member functions. You can write a more suitable version of a member function for a derived class when necessary. Writing a member function in a derived class to replace a base class member function is called function overriding .

To override a base class function, the derived member function declaration must exactly match the base class member function declaration, including the function name, return type and parameters.

To force an object of a derived class to use the base class version of an overridden function, you precede the function name with the base class name and the scope resolution operator using the syntax:

object.base_class::function();

Example

In the following code, the base class Person and the derived class Employee have their own function member with the same name setFields().

#include<iostream.h>

Get Jobilize Job Search Mobile App in your pocket Now!

Get it on Google Play Download on the App Store Now




Source:  OpenStax, Programming fundamentals in c++. OpenStax CNX. Jul 29, 2009 Download for free at http://cnx.org/content/col10788/1.1
Google Play and the Google Play logo are trademarks of Google Inc.

Notification Switch

Would you like to follow the 'Programming fundamentals in c++' conversation and receive update notifications?

Ask