C: Mostenirea multipla - aplicatii rezolvate


1) Exemplificare. Acesta varianta de program foloseste explicit operatorul de declarare (rezolvare...)

2) Cand doua sau mai multe obiecte sunt derivate intr-o clasa de baza comuna, puteti preveni prezenta intr-unul dintre acestea a mai multor copii ale clasei de baza, declarand-o virtual in momentul in care ea este mostenita (rezolvare...)

3) Care va fi metoda apelata de M1, M2 din C1 sau M2 din C2?
În situatia în care procedam ca pâna acum va fi apelata metoda M2 din C1 (rezolvare...)

4) Care va fi metoda apelata de M1, M2 din C1 sau M2 din C2? Va fi apelata metoda M1 din C1 (rezolvare...)

5) Exemplificare polimorfism (rezolvare...)

Rezolvari

#include <iostream>
using namespace std;
 
class baza
{
	public:
	int i;
};
class derivata1:public baza
{
	public:
	int j;
};
class derivata2:public baza
{
	public:
	int k;
};
class derivata3:public derivata1,public derivata2
{
	public:
	int suma;
};
void main()
{
	derivata3 ob;
	ob.derivata1::i=10;
	ob.j=20;
	ob.k=30;
	ob.suma=ob.derivata1::i+ob.j+ob.k;
	cout<<ob.derivata1::i<<" ";
	cout<<ob.j<<" "<<ob.k<<'\t';
	cout<<ob.suma<<endl;			
	int k;
   cin>>k;
}

#include <iostream>
using namespace std;
 
class baza
{
	public:
	int i;
};
class derivata1:virtual public baza
{
	public:
	int j;
};
class derivata2:virtual public baza
{
	public:
	int k;
};
class derivata3:public derivata1,public derivata2
{
	public:
	int suma;
};
void main()
{
	derivata3 ob;
	ob.i=10;
	ob.j=20;
	ob.k=30;
	ob.suma=ob.i+ob.j+ob.k;
	cout<<ob.i<<" ";
	cout<<ob.j<<" "<<ob.k<<'\t';
	cout<<ob.suma<<endl;	
 
	int k;
      cin>>k;
}

 
/* În acest exemplu fiecare din cele doua clase derivate intermediare mostenesc clasa de
baza în mod virtual, ceea ce permite clasei derivate din final, derivata3, sa mosteneasca
ambele clase fara sa mai apara probleme de ambiguitate. */

#include <iostream>
using namespace std;
 
class C1
{
	public:
	void M1()
	{
		M2();
	}
 
	void M2()
	{
		cout<<"unu "<<endl;
	}
};
 
class C2:public C1
{
	public:
	void M2()
	{
		cout<<"doi "<<endl;
	}
};
 
void main()
{
	C1 x;
	x.M1();	//unu
	C2 y;
	y.M1();	//unu

	int k;
    cin>>k;
}

#include <iostream>
using namespace std;
 
class C1
{
	public:
	void M1()
	{
		M2();
	}
 
	virtual void M2()
	{
	cout<<"unu "<<endl;
	}
};
 
class C2:public C1
{
	public:
	virtual void M2()
	{
		cout<<"doi "<<endl;
	}
};
 
void main()
{
	C1 x;
	x.M1();	//unu
	C2 y;
	y.M1();	//doi

	int k;
    cin>>k;
}

#include <iostream>
using namespace std;
#include<math.h>
#include<conio.h>

class baza
{
	public:
	virtual int add(int a,int b)
	{
		cout<<"Suma este: "<<a+b<<endl;
		return a+b;
	}
 
	virtual int scad(int a,int b)
	{
		cout<<"Scaderea este: "<<a-b<<endl;
		return a-b;
	}
 
	virtual int inmult(int a,int b)
	{
		cout<<"Inmultirea este: "<<a*b<<endl;
		return a*b;
	}
};
class deriv1:public baza
{
	virtual int inmult(int a,int b)
	{
		cout<<"Produsul este: "<<a*b<<endl;
		return a*b;
	}
};
 
class deriv2:public baza
{
	virtual int scad(int a,int b)
	{
		cout<<"Scaderea este: "<<a-b<<endl;
		return abs(a-b);
	};
};
void main()
{
	baza *a=new baza;
	cout<<a->add(100,200)<<' '<<a->scad(100,1000)<<' '<<a->inmult(10,10)<<endl<<endl;
	a=new deriv1;
	cout<<a->add(100,200)<<' '<<a->scad(100,1000)<<' '<<a->inmult(10,10)<<endl<<endl;
	a=new deriv2;
	cout<<a->add(100,200)<<' '<<a->scad(100,1000)<<' '<<a->inmult(10,10)<<endl<<endl; 
 
	int k;
    cin>>k;
}


COMENTARII

optional (nu va fi afisat pe website)
max: 255 caractere


Acest site utilizeaza cookie-uri. Navigand in continuare va exprimati acordul asupra folosirii cookie-urilor.