1 of 33

INHERITANCE

2 of 33

INHERITANCE

  • The mechanism of driving a new class from an old one is called Inheritance.
  • Old one is refereed to as base class.
  • New one is called the derived class or sub class.
  • A class can also inherit properties from more than one class or from more than one level.
  • Reusability

3 of 33

4 of 33

Inheritance Syntax�

class base_class_name

{

..................

};

class derived_class_name : acess_specifier base_class_name

{

...........

} ;

  •  access specifier  can be either private, protected or public.

5 of 33

Inheritance Example

class base

{

Private: int x;

Public: int y;

base()

{

x = 10; y = 15;

}

};

class derive1 : public base

{

public:

void display()

{

cout << "x of base class is not accessible" << endl;

cout << "value of y in base class = " << y;

} };

int main()

{

derive1 obj;

obj.display();

return 0;

}

6 of 33

OUTPUT

  • x of base class is not accessible
  • value of y in base class = 15

  • Explanation
  • public members of the base class base is also a public member of the derived class derive1.
  • The private memeber of base is not inherited by derived class derive1.

7 of 33

TYPES OF INHERITENCE

8 of 33

SINGLE INHERITANCE

  • If a single class is derived from one base class then it is called single inheritance.

  • In C++ single inheritance, base and derived class exhibit one to one relation.

9 of 33

SINGLE INHERITANCE

10 of 33

SINGLE INHERITANCE SYNTAX�

class A

{

..........

};

class B : acess_specifier A

{

...........

} ;

11 of 33

SINGLE INHERITANCE EXAMPLE

class base

{

public: int x;

void getdata()

{

cout << "Enter the value of x = "; cin >> x;

}

};

class derive : public base

{

private: int y;

public:

void readdata()

{

cout << "Enter the value of y = ";

cin >> y;

}

void product()

{ cout << "Product = " << x * y; }

};

main()

{ derive a;

a.getdata();

a.readdata();

a.product();

}

12 of 33

Output

  • Enter the value of x = 3
  • Enter the value of y = 4
  • Product = 12

13 of 33

Multilevel InheritanceIf a class is derived from another derived class

14 of 33

Multilevel Inheritance Syntax

class A

{

...........

};

class B : acess_specifier A

{

...........

} ;

class C : access_specifier B

{

...........

} ;

15 of 33

Multilevel Inheritance Example�

class base

{

public: int x;

void getdata()

{

cout << "Enter value of x= ";

cin >> x;

} };

class derive1 : public base

{

public: int y;

void readdata()

{ cout << "\nEnter value of y= ";

cin >> y;

} };

class derive2 : public derive1

{

private: int z;

public: void indata()

{

cout << "\nEnter value of z= "; cin >> z;

}

void product()

{

cout << "\nProduct= " << x * y * z;

} };

main()

{

derive2 a;

a.getdata();

a.readdata();

a.indata();

a.product();

}

16 of 33

Output

  • Enter value of x= 2
  • Enter value of y= 3
  • Enter value of z= 3
  • Product= 18

17 of 33

Hierarchical InheritanceWhen several classes are derived from common base class 

18 of 33

Hierarchical Inheritance Syntax�

class A

{

.............

};

class B : access_specifier A

{

...........

} ;

class C : access_specifier A

{

...........

} ;

class D : access_specifier A

{

..........

} ;

19 of 33

Hierarchical Inheritance Example�

  • class A {
  • public: int x, y;
  • void getdata()
  • {
  • cout << "\nEnter value of x and y:\n";
  • cin >> x >> y;
  • } };
  • class B : public A {
  • public: void product()
  • {
  • cout << "\nProduct= " << x * y;
  • } };

class C : public A {

public: void sum()

{

cout << "\nSum= " << x + y;

} };

int main()

{

B obj1;

C obj2;

obj1.getdata();

obj1.product();

obj2.getdata();

obj2.sum();

}

20 of 33

Output

enter value of x and y:

2

3

Product= 6

Enter value of x and y:

2

3

Sum= 5

21 of 33

Multiple InheritanceIf a class is derived from two or more base classes 

22 of 33

Multiple Inheritance Syntax�

class A

{

..........

};

class B

{ ...........

} ;

class C : acess_specifier A,access_specifier B

{

...........

} ;

23 of 33

Multiple Inheritance Example�

class A {

public: int x;

void getx()

{

cout << "enter value of x: ";

cin >> x;

} };

class B

{ public: int y;

void gety()

{ cout << "enter value of y: "; cin >> y;

} };

class C : public A, public B

{

public: void sum()

{

cout << "Sum = " << x + y;

}};

int main()

{

C obj1;

C obj1.getx();

obj1.gety();

obj1.sum();

}

24 of 33

Output

  • enter value of x: 5
  • enter value of y: 4
  • Sum = 9

25 of 33

Hybrid Inheritancecombination of two or more types of inheritance.

26 of 33

Hybrid Inheritance Syntax

class A

{

.........

};

class B : public A

{

..........

} ;

class C

{

...........

};

class D : public B, public C

{

...........

};

27 of 33

Hybrid Inheritance Example�

class A {

public: int x;

};

class B : public A {

public:

B()

{ x = 10; }

};

class C

{

public: int y;

C() { y = 4; }

};

class D : public B, public C

{

public: void sum()

{

cout << "Sum= " << x + y; } };

int main()

{

D obj1;

obj1.sum();

}

28 of 33

Output

  • Sum= 14

29 of 33

Protected access modifier

  • Protected access modifier is similar to that of private access modifiers, the difference is that the class member declared as Protected are inaccessible outside the class but they can be accessed by any subclass(derived class) of that class.�

30 of 33

class Parent

{

protected:

int id_protected;

};

class Child : public Parent

{

public:

void setId(int id)

{

id_protected = id;

}

void displayId()

{

cout << "id_protected is: " << id_protected;

}

};

int main()

{

Child obj1;

obj1.setId(81);

obj1.displayId();

return 0;

}

31 of 33

Modes of Inheritance

  • Public mode: If we derive a sub class from a public base class. Then the public member of the base class will become public in the derived class and protected members of the base class will become protected in derived class.

  • Protected mode: If we derive a sub class from a Protected base class. Then both public member and protected members of the base class will become protected in derived class.

  • Private mode: If we derive a sub class from a Private base class. Then both public member and protected members of the base class will become Private in derived class.

32 of 33

  • class A
  • {
  • public:
  • int x;
  • protected:
  • int y;
  • private:
  • int z;
  • };

  • class B : public A
  • {
  • // x is public
  • // y is protected
  • // z is not accessible from B
  • };

  • class C : protected A
  • {
  • // x is protected
  • // y is protected
  • // z is not accessible from C
  • };

  • class D : private A
  • // 'private' is default for classes
  • {
  • // x is private
  • // y is private
  • // z is not accessible from D
  • };

33 of 33