Opps Unit 7
Opps Unit 7
Inheritance in C++
●
●
● C++
// the class
#include <iostream>
class Person {
int id;
char name[100];
public:
void set_p()
void display_p()
cout << endl <<"Id: "<< id << "\nName: " << name <<endl;
};
char course[50];
int fee;
public:
void set_s()
set_p();
void display_s()
display_p();
cout <<"Course: "<< course << "\nFee: " << fee << endl;
};
int main()
Student s;
s.set_s();
s.display_s();
return 0;
Output:
Enter the Id: 101
Enter the Name: Dev
Enter the Course Name: GCS
Enter the Course Fee:70000
Id: 101
Name: Dev
Course: GCS
Fee: 70000
● C++
#include<iostream>
class Person
int id;
char name[100];
public:
void set_p();
void display_p();
};
void Person::set_p()
cin>>id;
cin>>name;
void Person::display_p()
char course[50];
int fee;
public:
void set_s();
void display_s();
};
void Student::set_s()
set_p();
cin>>course;
cin>>fee;
void Student::display_s()
display_p();
}
int main()
Student s;
s.set_s();
s.display_s();
return 0;
Output:
Enter the Id: 101
Enter the Name: Dev
Enter the Course Name: GCS
Enter the Course Fee: 70000
Id: 101
Name: Dev
Course: GCS
Fee: 70000
● C++
#include<string.h>
class Person
int id;
char name[100];
public:
void set_p(int,char[]);
void display_p();
};
this->id=id;
strcpy(this->name,n);
}
void Person::display_p()
cout<<endl<<id<<"\t"<<name;
char course[50];
int fee;
public:
void set_s(int,char[],char[],int);
void display_s();
};
set_p(id,n);
strcpy(course,c);
fee=f;
void Student::display_s()
display_p();
cout<<"t"<<course<<"\t"<<fee;
main()
Student s;
s.set_s(1001,"Ram","B.Tech",2000);
s.display_s();
return 0;
● CPP
// C++ program to demonstrate implementation
// of Inheritance
#include <bits/stdc++.h>
// Base class
class Parent {
public:
int id_p;
};
public:
int id_c;
};
// main function
int main()
Child obj1;
obj1.id_c = 7;
obj1.id_p = 91;
return 0;
Output
Child id is: 7
Parent id is: 91
Output:
Child id is: 7
Parent id is: 91
In the above program, the ‘Child’ class is publicly inherited from the ‘Parent’ class
so the public data members of the class ‘Parent’ will also be inherited by the
class ‘Child’.
Modes of Inheritance: There are 3 modes of inheritance.
1. Public Mode: If we derive a subclass 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 the derived
class.
2. Protected Mode: If we derive a subclass from a Protected base class. Then
both public members and protected members of the base class will become
protected in the derived class.
3. Private Mode: If we derive a subclass from a Private base class. Then both
public members and protected members of the base class will become Private
in the derived class.
Note: The private members in the base class cannot be directly accessed in the
derived class, while protected members can be directly accessed. For example,
Classes B, C, and D all contain the variables x, y, and z in the below example. It
is just a question of access.
● CPP
class A {
public:
int x;
protected:
int y;
private:
int z;
};
class B : public A {
// x is public
// y is protected
};
class C : protected A {
// x is protected
// y is protected
};
// x is private
// y is private
The below table summarizes the above three modes and shows the access
specifier of the members of the base class in the subclass when derived in
public, protected and private modes:
Types Of Inheritance:-
1. Single inheritance
2. Multilevel inheritance
3. Multiple inheritance
4. Hierarchical inheritance
5. Hybrid inheritance
Syntax:
class subclass_name : access_mode base_class
{
// body of subclass
};
OR
class A
{
... .. ...
};
class B: public A
{
... .. ...
};
● CPP
// Single inheritance
#include<iostream>
// base class
class Vehicle {
public:
Vehicle()
{
};
};
// main function
int main()
Car obj;
return 0;
Output
This is a Vehicle
● C++
// Example:
#include<iostream>
class A
protected:
int a;
public:
void set_A()
cin>>a;
void disp_A()
{
cout<<endl<<"Value of A="<<a;
};
class B: public A
int b,p;
public:
void set_B()
set_A();
cin>>b;
void disp_B()
{
disp_A();
cout<<endl<<"Value of B="<<b;
void cal_product()
p=a*b;
};
main()
B _b;
_b.set_B();
_b.cal_product();
return 0;
● C++
// Example:
#include<iostream>
class A
protected:
int a;
public:
void set_A(int x)
a=x;
void disp_A()
cout<<endl<<"Value of A="<<a;
};
class B: public A
int b,p;
public:
set_A(x);
b=y;
void disp_B()
disp_A();
cout<<endl<<"Value of B="<<b;
void cal_product()
p=a*b;
};
main()
{
B _b;
_b.set_B(4,5);
_b.cal_product();
return 0;
Output
Product of 4 * 5 = 20
Syntax:
class subclass_name : access_mode base_class1, access_mode
base_class2, ....
{
// body of subclass
};
class B
{
... .. ...
};
class C
{
... .. ...
};
class A: public B, public C
{
... ... ...
};
Here, the number of base classes will be separated by a comma (‘, ‘) and the
access mode for every base class must be specified.
● CPP
// multiple inheritance
#include <iostream>
class Vehicle {
public:
};
// second base class
class FourWheeler {
public:
FourWheeler()
};
};
// main function
int main()
return 0;
Output
This is a Vehicle
This is a 4 wheeler Vehicle
● C++
// Example:
#include<iostream>
class A
protected:
int a;
public:
void set_A()
cin>>a;
void disp_A()
cout<<endl<<"Value of A="<<a;
};
class B: public A
protected:
int b;
public:
void set_B()
cin>>b;
void disp_B()
cout<<endl<<"Value of B="<<b;
};
class C: public B
int c,p;
public:
void set_C()
{
cin>>c;
void disp_C()
cout<<endl<<"Value of C="<<c;
void cal_product()
p=a*b*c;
};
main()
{
C _c;
_c.set_A();
_c.set_B();
_c.set_C();
_c.disp_A();
_c.disp_B();
_c.disp_C();
_c.cal_product();
return 0;
To know more about it, please refer to the article Multiple Inheritances.
3. Multilevel Inheritance: In this type of inheritance, a derived class is created
from another derived class.
Syntax:-
class C
{
... .. ...
};
class B:public C
{
... .. ...
};
class A: public B
{
... ... ...
};
● CPP
#include <iostream>
// base class
class Vehicle {
public:
};
public:
fourWheeler()
};
// sub class derived from the derived base class fourWheeler
public:
};
// main function
int main()
Car obj;
return 0;
Output
This is a Vehicle
Objects with 4 wheels are vehicles
Car has 4 Wheels
4. Hierarchical Inheritance: In this type of inheritance, more than one subclass
is inherited from a single base class. i.e. more than one derived class is created
from a single base class.
Syntax:-
class A
{
// body of the class A.
}
class B : public A
{
// body of class B.
}
class C : public A
{
// body of class C.
}
class D : public A
{
// body of class D.
}
● CPP
// Hierarchical Inheritance
#include <iostream>
// base class
class Vehicle {
public:
};
};
};
// main function
int main()
Car obj1;
Bus obj2;
return 0;
Output
This is a Vehicle
This is a Vehicle
#include <iostream>
// base class
class Vehicle {
public:
// base class
class Fare {
public:
};
};
};
// main function
int main()
{
// Creating object of sub class will
Bus obj2;
return 0;
Output
This is a Vehicle
Fare of Vehicle
● C++
// Example:
#include <iostream>
class A
protected:
int a;
public:
void get_a()
cin>>a;
};
class B : public A
protected:
int b;
public:
void get_b()
cin>>b;
};
class C
{
protected:
int c;
public:
void get_c()
cin>>c;
};
protected:
int d;
public:
void mul()
get_a();
get_b();
get_c();
};
int main()
D d;
d.mul();
return 0;
// Inheritance
#include <iostream>
class ClassA {
public:
int a;
};
public:
int b;
};
public:
int c;
};
class ClassD : public ClassB, public ClassC {
public:
int d;
};
int main()
ClassD obj;
obj.b = 20;
obj.c = 30;
obj.d = 40;
cout << " a from ClassB : " << obj.ClassB::a;
Output
a from ClassB : 10
a from ClassC : 100
b : 20
c : 30
d : 40
Output:
a from ClassB : 10
a from ClassC : 100
b : 20
c : 30
d : 40
In the above example, both ClassB and ClassC inherit ClassA, they both have a
single copy of ClassA. However Class-D inherits both ClassB and ClassC,
therefore Class-D has two copies of ClassA, one from ClassB and another from
ClassC.
If we need to access the data member of ClassA through the object of Class-D,
we must specify the path from which a will be accessed, whether it is from
ClassB or ClassC, bcoz compiler can’t differentiate between two copies of
ClassA in Class-D.
There are 2 Ways to Avoid this Ambiguity:
1) Avoiding ambiguity using the scope resolution operator: Using the scope
resolution operator we can manually specify the path from which data member a
will be accessed, as shown in statements 3 and 4, in the above example.
● CPP
#include<iostream>
class ClassA
public:
int a;
};
public:
int b;
};
public:
int c;
};
public:
int d;
};
int main()
ClassD obj;
obj.a = 10; // Statement 3
obj.b = 20;
obj.c = 30;
obj.d = 40;
Output:
a : 100
b : 20
c : 30
d : 40
According to the above example, Class-D has only one copy of ClassA,
therefore, statement 4 will overwrite the value of a, given in statement 3.