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; }