C++: Multiple inheritance - Applications solved


1) Exemplification. This program uses explicit version of declaration operator.
#include <iostream>
using namespace std;
 
class base
{
	public:
	int i;
};
class derived1:public base
{
	public:
	int j;
};
class derived2:public base
{
	public:
	int k;
};
class derived3:public derived1,public derived2
{
	public:
	int sum;
};
void main()
{
	derived3 ob;
	ob.derived1::i=10;
	ob.j=20;
	ob.k=30;
	ob.sum=ob.derived1::i+ob.j+ob.k;
	cout<<ob.derived1::i<<" ";
	cout<<ob.j<<" "<<ob.k<<'\t';
	cout<<ob.sum<<endl;			
	int k;
        cin>>k;
}
2) When two or more objects are derived in a common base class, you can prevent this in one of these multiple copies of the base class, declaring a virtual when it is inherited.
#include <iostream>
using namespace std;
 
class base
{
	public:
	int i;
};
class derived1:virtual public base
{
	public:
	int j;
};
class derived2:virtual public base
{
	public:
	int k;
};
class derived3:public derived1,public derived2
{
	public:
	int sum;
};
void main()
{
	derived3 ob;
	ob.i=10;
	ob.j=20;
	ob.k=30;
	ob.sum=ob.i+ob.j+ob.k;
	cout<<ob.i<<" ";
	cout<<ob.j<<" "<<ob.k<<'\t';
	cout<<ob.sum<<endl;	
 
	int k;
      cin>>k;
}
 
 
/* In this example, each of the two intermediate derived classes inherit class
based on a virtual, allowing derived class final, derived 3, to inherit
both classes and not experience problems of ambiguity. */
3) Which method will be called M1, M2 or M2 C1 C2? In case that until now proceed M2 from C1 method will be called .
#include <iostream>
using namespace std;
 
class C1
{
	public:
	void M1()
	{
		M2();
	}
 
	void M2()
	{
		cout<<"one"<<endl;
	}
};
 
class C2:public C1
{
	public:
	void M2()
	{
		cout<<"two"<<endl;
	}
};
 
void main()
{
	C1 x;
	x.M1();	//one
	C2 y;
	y.M1();	//one

	int k;
    cin>>k;
}
4) Which method will be called M1, M2 or M2 C1 C2? M1 from C1 method will be called.
#include <iostream>
using namespace std;
 
class C1
{
	public:
	void M1()
	{
		M2();
	}
 
	virtual void M2()
	{
	cout<<"one"<<endl;
	}
};
 
class C2:public C1
{
	public:
	virtual void M2()
	{
		cout<<"two"<<endl;
	}
};
 
void main()
{
	C1 x;
	x.M1();	//one
	C2 y;
	y.M1();	//two

	int k;
    cin>>k;
}
5) Exemplification polymorphism.
#include <iostream>
using namespace std;
#include<math.h>
#include<conio.h>

class base
{
	public:
	virtual int add(int a,int b)
	{
		cout<<"Sum is: "<<a+b<<endl;
		return a+b;
	}
 
	virtual int decreased(int a,int b)
	{
		cout<<"Decreased is: "<<a-b<<endl;
		return a-b;
	}
 
	virtual int multiplication(int a,int b)
	{
		cout<<"Multiplication is: "<<a*b<<endl;
		return a*b;
	}
};
class deriv1:public base
{
	virtual int multiplication(int a,int b)
	{
		cout<<"The product is: "<<a*b<<endl;
		return a*b;
	}
};
 
class deriv2:public base
{
	virtual int decreased(int a,int b)
	{
		cout<<"Decreased is: "<<a-b<<endl;
		return abs(a-b);
	};
};
void main()
{
	base *a=new base;
	cout<<a->add(100,200)<<' '<<a->decreased(100,1000)<<' '<<a->multiplication(10,10)<<endl<<endl;
	a=new deriv1;
	cout<<a->add(100,200)<<' '<<a->decreased(100,1000)<<' '<<a->multiplication(10,10)<<endl<<endl;
	a=new deriv2;
	cout<<a->add(100,200)<<' '<<a->decreased(100,1000)<<' '<<a->multiplication(10,10)<<endl<<endl; 
 
	int k;
    cin>>k;
}
Cookies help us deliver our services. By using our services, you agree to our use of cookies.