Types of Inheritances:
Simple or Single
Multiple
Multilevel
Hierarchical
Hybrid
Hierarchical Inheritance:
From a Single Direct Base Class, there can be more than one Derived Classes
(Derived Class may be
Direct Derived Class or Derived Class).
Base Class : Only One Direct Base Class
Derived Class : Can be more than One Direct Derived or Derived Classes
Direct Base Class : Internal
Intermdiate Base Class : External1, External2
Derived Class : Result1, Result2
//Hierarchical Inheritance
#include<iostream.h>
#include<conio.h>
class Internal
{
protected:
int m1,m2,m3,m4;
public:
Internal(int a,int b,int c,int d)
{
m1=a;
m2=b;
m3=c;
m4=d;
}
};
class External1 : public Internal
{
protected:
int e1;
public:
External1(int a,int b,int c,int d,int x1):Internal(a,b,c,d)
{
e1=x1;
}
};
class External2 : public Internal
{
protected:
int e2;
public:
External2(int a,int b,int c,int d,int x2):Internal(a,b,c,d)
{
e2=x2;
}
};
class Result1 : public External1
{
public:
Result1(int a,int b,int c,int d,int x1):External1(a,b,c,d,x1)
{
}
void display()
{
float im=((m1+m2+m3+m4)/4.0)*0.4;
float em=e1*0.6;
cout<<"\nSubject 1 = "<<(int)(im+em);
}
};
class Result2 : public External2
{
public:
Result2(int a,int b,int c,int d,int x2):External2(a,b,c,d,x2)
{
}
void display()
{
float im=((m1+m2+m3+m4)/4.0)*0.4;
float em=e2*0.6;
cout<<"\nSubject 2 = "<<(int)(im+em);
}
};
void main()
{
clrscr();
int m1,m2,m3,m4,e1,e2;
cout<<"\nAttendance Mark = ";
cin>>m1;
cout<<"\nAssignment Mark = ";
cin>>m2;
cout<<"\nDiscipline Mark = ";
cin>>m3;
cout<<"\nInternal Test Mark = ";
cin>>m4;
cout<<"\nSubject 1 External Mark = ";
cin>>e1;
cout<<"\nSubject 2 External Mark = ";
cin>>e2;
Result1 ob1(m1,m2,m3,m4,e1);
Result2 ob2(m1,m2,m3,m4,e2);
ob1.display();
ob2.display();
getch();
}
Hybrid Inheritance:
- Combination of more than one Inheritances
- Final result must be a single derived class
Base Class : More than One Direct Base Class
Derived Class : Only One Derived Class
Direct Base Class : External, Attendance,Assignment,Discipline,Internal
Intermediate Base Class : External_Mark,Internal_Mark
Derived Class : Result
//Hybrid Inheritance
#include<iostream.h>
#include<conio.h>
//Simple or Single Inheritance
class External
{
protected:
int e1;
public:
External(int a)
{
e1=a;
}
};
class External_Mark : public External
{
public:
External_Mark(int a):External(a)
{
}
float emark()
{
return(e1*0.6);
}
};
//Multiple Inheritance
class Attendance
{
protected:
int m1;
public:
Attendance(int b)
{
m1=b;
}
};
class Assignment
{
protected:
int m2;
public:
Assignment(int c)
{
m2=c;
}
};
class Discipline
{
protected:
int m3;
public:
Discipline(int d)
{
m3=d;
}
};
class Internal
{
protected:
int m4;
public:
Internal(int e)
{
m4=e;
}
};
class Internal_Mark :public Attendance,public Assignment,public Discipline,public
Internal
{
public:
Internal_Mark(int b,int c,int d,int
e):Attendance(b),Assignment(c),Discipline(d),Internal(e)
{
}
float imark()
{
return(((m1+m2+m3+m4)/4.0)*0.4);
}
};
//Hybrid Inheritance = Single + Multiple
class Result : public External_Mark,public Internal_Mark
{
public:
Result(int a,int b,int c,int d,int e):External_Mark(a),Internal_Mark(b,c,d,e)
{
}
void display()
{
float im=imark();
float em=emark();
cout<<"\nResult = "<<(int)(im+em);
}
};
void main()
{
clrscr();
int m1,m2,m3,m4,e1;
cout<<"\nAttendance Mark = ";
cin>>m1;
cout<<"\nAssignment Mark = ";
cin>>m2;
cout<<"\nDiscipline Mark = ";
cin>>m3;
cout<<"\nInternal Test Mark = ";
cin>>m4;
cout<<"\nSubject 1 External Mark = ";
cin>>e1;
Result ob(e1,m1,m2,m3,m4);
ob.display();
getch();
}