Technology Advances

Inheritance

1. A simple program demonstrating inheritance

    Code Listing: 

// Purpose: A simple program showing inheritance

#include <iostream>
using namespace std;

class base {
int i, j;
public:
void set(int a, int b) { i = a; j = b; }
void show() { cout << i << " " << j << "\n"; }
};

// inheritance
class derived : public base {
int k;
public:
derived(int x) { k = x; }
void showk() { cout << k << "\n"; }
};

int main()
{
derived ob(3);

ob.set(1, 2); // access member of base
ob.show(); // access member of base

ob.showk(); // uses member of derived class

return 0;
}

    Running session:

1 2
3
 
 

2. Using protected members

Code listing:

// Purpose: Inherite protected members of the base class

#include <iostream>
using namespace std;

class base {
protected:
int i, j; // private to base, but accessible to derived
public:
void set(int a, int b) { i = a; j = b; }
void show() { cout << i << " " << j << "\n"; }
};

class derived : public base {
int k;
public:
// derived may access base's i and j
void setk() { k = i*j; }

void showk() { cout << k << "\n"; }
};

int main()
{
derived ob;

ob.set(2, 3); // OK, known to derived
ob.show(); // OK, known to derived

ob.setk();
ob.showk();

return 0;
}

Running session:

2 3
6
 
 

3. Protected inheritance

    Code Listing: 

// Purpose: using protected for inheritance of a base class

#include <iostream>
using namespace std;

class base {
int i;
protected:
int j;
public:
int k;
void seti(int a) { i = a; }
int geti() { return i; }
};

// Inherit base as protected.
class derived : protected base {
public:
void setj(int a) { j = a; } // j is protected here
void setk(int a) { k = a; } // k is also protected
int getj() { return j; }
int getk() { return k; }
};

int main()
{
derived ob;

/* This next line is illegal because seti() is
a protected member of derived, which makes it
inaccessible outside of derived. */

// ob.seti(10);

// cout << ob.geti(); // illegal -- geti() is protected
// ob.k = 10; // also illegal because k is protected

// these next statements are OK
ob.setk(10);
cout << ob.getk() << ' ';
ob.setj(12);
cout << ob.getj() << ' ';

return 0;
}
 

    Running session:

10 12
 
 

4. Multiple inheritance 

    Code Listing: 

// Purpose: An example of multiple base classes.

#include <iostream>
using namespace std;

class base1 {
protected:
int x;
public:
void showx() { cout << x << "\n"; }
};

class base2 {
protected:
int y;
public:
void showy() { cout << y << "\n"; }
};

// Inherit multiple base classes.
class derived: public base1, public base2 {
public:
void set(int i, int j) { x = i; y = j; }
};

int main()
{
derived ob;

ob.set(10, 20); // provided by derived
ob.showx(); // from base1
ob.showy(); // from base2

return 0;
}
 

    Running session:

10
20

 

5. Calling base class's constructor in derived class 

    Code Listing: 

// Purpose: demonstrate how to call base class's constructor

#include <iostream>
using namespace std;

class base1 {
protected:
int i;
public:
base1(int x) { i = x; cout << "Constructing base1\n"; }
~base1() { cout << "Destructing base2\n"; }
};

class base2 {
protected:
int k;
public:
base2(int x) { k = x; cout << "Constructing base2\n"; }
~base2() { cout << "Destructing base2\n"; }
};

class derived: public base1, public base2 {
int j;
public:
derived(int x, int y, int z): base1(y), base2(z)
{ j = x; cout << "Constructing derived\n"; }


~derived() { cout << "Destructing derived\n"; }
void show() { cout << i << " " << j << " " << k << "\n"; }
};

int main()
{
derived ob(3, 4, 5);

ob.show(); // displays 4 3 5

return 0;
}
 

    Running session:

Constructing base1
Constructing base2
Constructing derived
4 3 5
Destructing derived
Destructing base2
Destructing base2