Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Introduction
– The mechanism of deriving a new class from an old one is called inheritance.
– Base and derived class
– Types of inheritance:
– Simple
– Multiple
– Multilevel
– Hierarchical
– Hybrid
Derived Class
– When the function with same name is defined in both base and derived class,
then the derived class definition overrides the base class definition.
class A{ class C{
int x; public: int z;
public: void disp2(){
void disp(){ z=30;
OUTPUT: x=10; cout<<"\nIn Class C"<<z;
cout<<"\nIn Class A"<<x; }};
}};
In Class A10
class D:private A, protected B, public C
In Class B20 class B{ {
In Class C30 protected: public:
int y; display(){disp();disp1();disp2();}
public: };
void disp1(){
y=20; int main(){
cout<<"\nIn Class B"<<y; D ob; ob.display();
}}; }
Multiple Inheritance
#include<iostream> class C
using namespace std; {
public:
class A void disp(){
OUTPUT: { cout<<"\nIn Class C";
public:
}
void disp(){
Error cout<<"\nIn Class A";
};
Multiple }
class D:public A, B, C
candidates };
{
‘disp()’ class B };
{
public: int main()
void disp(){ {
cout<<"\nIn Class B"; D ob;
} ob.disp();
}; }
Multiple Inheritance
#include<iostream>
using namespace std; class C
{
class A public:
{ void disp(){
public: cout<<"\nIn Class C";
OUTPUT: void disp(){ }
cout<<"\nIn Class A"; };
}
In Class A }; class D:public A, B, C
{
class B };
{
public: int main()
void disp(){ {
cout<<"\nIn Class B"; D ob;
} ob.A::disp();
}; }
Multiple Inheritance
#include<iostream> class C
using namespace std; {
public:
class A void disp(){
OUTPUT: { cout<<"\nIn Class C";
public: }
void disp(){ };
Error cout<<"\nIn Class A";
B and C are } class D:public A, B, C
inherited }; {
};
privately class B
{ int main()
public: {
void disp(){ D ob;
cout<<"\nIn Class B"; ob.A::disp(); ob.B::disp();
} ob.C::disp();
}; }
Multiple Inheritance
#include<iostream> class C
using namespace std; {
public:
class A void disp(){
{
OUTPUT: public:
cout<<"\nIn Class C";
}
void disp(){
};
In Class A cout<<"\nIn Class A";
}
In Class B };
class D:public A, public B, public C{
};
In Class C
class B
{ int main()
public: {
void disp(){ D ob;
cout<<"\nIn Class B"; ob.A::disp(); ob.B::disp();
} ob.C::disp();
}; }
Hierarchical Inheritance
OUTPUT:
class shape{ class square: protected shape{
protected: public:
Enter dimensions of int l,b,h; get(){
rectangle10 20 public: cout<<"\nEnter dimensions of square";
disp(){ cin>>l; b=l; h=0;
cout<<l<<b<<h; }
10 area(){
}};
20 0 200 disp();
cout<<l*b;
class rect: protected shape{
}};
Enter public:
dimensions of square10 get(){ int main(){
cout<<"Enter dimensions of rectangle"; rect ob;
cin>>l; cin>>b; h=0; square ob1;
10 10 0 } ob.get();
100 area(){ ob.area();
disp(); ob1.get();
cout<<l*b; ob1.area();
}}; }
Hybrid Inheritance
Code
OUTPUT:
Error
Ambiguity in disp()
#include<iostream> class C: public A
using namespace std; {
};
class A
{
public: class D:public B, public C
disp() {
{ };
cout<<"Class A";
}
int main()
};
{
class B: public A D ob;
{ ob.disp();
}; }
Virtual Base Class
– When a class is made a virtual base class, C++ takes necessary care to see that
only one copy of that class is inherited, regardless of how many inheritance
paths exist between the virtual base class and a derived class.
Code
class A{ class D{
public: public:
OUTPUT: A(){cout<<"In class A\n";} D(){cout<<"In class D\n";}
}; };
In Class A
In Class B class B: public A{ class E: public C, public D{
In Class C public: public:
In Class D B(){cout<<"In class B\n";} E(){cout<<"In class E";}
In Class E }; };
class C: public B{
public: int main(){
C(){cout<<"In class C\n";} E ob;
}; }
Constructor Invocation
class A{ class D{
public: public:
OUTPUT: A(){cout<<"In class A\n";} D(){cout<<"In class D\n";}
}; };
In Class D
In Class A class B: public A{ class E: public D, public C{
In Class B public: public:
In Class C B(){cout<<"In class B\n";} E(){cout<<"In class E";}
In Class E }; };
class C: public B{
public: int main(){
C(){cout<<"In class C\n";} E ob;
}; }
Constructor Invocation
class A{ class D{
public: public:
OUTPUT: A(){cout<<"In class A\n";} D(){cout<<"In class D\n";}
}; };
In Class A
In Class B class B: public A{ class E: public D, virtual public C{
In Class C public: public:
In Class D B(){cout<<"In class B\n";} E(){cout<<"In class E";}
In Class E }; };
class C: public B{
public: int main(){
C(){cout<<"In class C\n";} E ob;
}; }
Constructor Invocation
#include<iostream> class C
using namespace std; {
A x;
class A
{ B y;
public: int z;
OUTPUT: int x; public:
get1(int x1){x=x1;} get3(int m,int n, int o){x.get1(m);y.get2(n);z=o;}
234 disp1(){cout<<x;}
void disp3(){x.disp1();y.disp2();cout<<z;}
};
};
class B
{ int main()
public: {
int y; C ob;
B(){}
ob.get3(2,3,4);
get2(int y1){y=y1;}
disp2(){cout<<y;} ob.disp3();
}; }
Pointer to Object
#include<iostream>
using namespace std;
int main()
{
class test
{
test *ptr=new test[5];
OUTPUT:
int x; for(int i=0;i<5;i++)
public:
void get(int i) {
0 10 20 30 40 { ptr->get(i);
x=10*i;
} ptr->put();
void put() ptr++;
{
cout<<x; }
} }
};
Pointer to Derived Classes
– When the same function name is used in both the classes, then the function in
the base class is made virtual so that the function call is postponed till runtime.
– So, the linking between the object and the pointer is done at runtime based on
the object it refers to rather than the type of pointer it is.
Code
– We can declare a function virtual inside the base class and redefine it in the
derived classes.
– This function in the base class is a placeholder.
– Referred to as ‘do-nothing’ function
– virtual void display() = 0;
Code