Multiple héritage en C++ - Applications résolues


1) Exemplification. Cette version de programme utilise explicite l’operateur de declaration.
#include <iostream>
using namespace std;
 
class base
{
	public:
	int i;
};
class derive1:public base
{
	public:
	int j;
};
class derive2:public base
{
	public:
	int k;
};
class derive3:public derive1,public derive2
{
	public:
	int somme;
};
void main()
{
	derive3 ob;
	ob.derive1::i=10;
	ob.j=20;
	ob.k=30;
	ob.somme=ob.derive1::i+ob.j+ob.k;
	cout<<ob.derive1::i<<" ";
	cout<<ob.j<<" "<<ob.k<<'\t';
	cout<<ob.somme<<endl;			
	int k;
   cin>>k;
}

2) Exemplification clasees virtuelles.
/*Quand deux ou plusieurs objets derivent 
d’une classe de base commune, 
On peut le prevenir dans l’un de plus copies 
de la classe de base, devenue virtuelle du moment de l’eritage*/
 
#include <iostream>
using namespace std;
 
class base
{
	public:
	int i;
};
class derive1:virtual public base
{
	public:
	int j;
};
class derive2:virtual public base
{
	public:
	int k;
};
class derive3:public derive1,public derive2
{
	public:
	int somme;
};
void main()
{
	derive3 ob;
	ob.i=10;
	ob.j=20;
	ob.k=30;
	ob.somme=ob.i+ob.j+ob.k;
	cout<<ob.i<<" ";
	cout<<ob.j<<" "<<ob.k<<'\t';
	cout<<ob.somme<<endl;	
 
	int k;
    cin>>k;
}
 
/* Dans cet exemple chaque classe derivee intermediaire 
herite la classe de base virtuelle, ce qui permet a la 
classe derivee du final, derivee 3, heriter les deux 
classes sans problemes d’embiguité. */

3) Quelle methode on applique de M1, M2 de C1 ou M2 de C2? Si on procede comme jusqu’a maintenant, on va appeller la methode M2 de C1.
#include <iostream>
using namespace std;
 
class C1
{
	public:
	void M1()
	{
		M2();
	}
 
	void M2()
	{
		cout<<"un "<<endl;
	}
};
 
class C2:public C1
{
	public:
	void M2()
	{
		cout<<"deux "<<endl;
	}
};
 
void main()
{
	C1 x;
	x.M1();	//un
	C2 y;
	y.M1();	//un

	int k;
    cin>>k;
}

4) Quelle methode on va appeller de M1, M2 de C1 ou M2 de C2 ? On va appeller la methode M1 de C1.
>#include <iostream>
using namespace std;
 
class C1
{
	public:
	void M1()
	{
		M2();
	}
 
	virtual void M2()
	{
	cout<<"un "<<endl;
	}
};
 
class C2:public C1
{
	public:
	virtual void M2()
	{
		cout<<"deux "<<endl;
	}
};
 
void main()
{
	C1 x;
	x.M1();	//un
	C2 y;
	y.M1();	//deux

	int k;
        cin>>k;
}

5) Exemplification polimorfisme.
#include <iostream>
using namespace std;
#include<math.h>
#include<conio.h>

class base
{
	public:
	virtual int add(int a,int b)
	{
		cout<<"La somme est: "<<a+b<<endl;
		return a+b;
	}
 
	virtual int diminuation(int a,int b)
	{
		cout<<"La diminution est: "<<a-b<<endl;
		return a-b;
	}
 
	virtual int multiplication(int a,int b)
	{
		cout<<"La multiplication est: "<<a*b<<endl;
		return a*b;
	}
};
class deriv1:public base
{
	virtual int multiplication(int a,int b)
	{
		cout<<"Le produit est: "<<a*b<<endl;
		return a*b;
	}
};
 
class deriv2:public base
{
	virtual int diminuation(int a,int b)
	{
		cout<<"La diminuation est: "<<a-b<<endl;
		return abs(a-b);
	};
};
void main()
{
	base *a=new base;
	cout<<a->add(100,200)<<' '<<a->diminuation(100,1000)<<' '<<a->multiplication(10,10)<<endl<<endl;
	a=new deriv1;
	cout<<a->add(100,200)<<' '<<a->diminuation(100,1000)<<' '<<a->multiplication(10,10)<<endl<<endl;
	a=new deriv2;
	cout<<a->add(100,200)<<' '<<a->diminuation(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.