C: Mostenirea simpla - aplicatii rezolvate


1) Exemplificare ierarhie de clase (redeclararea datelor membru şi supraîncarcarea functiilor membru ale claselor de baza în clasa derivata) (rezolvare...)

2) Exemplificare constructorii în ierarhii de clase (rezolvare...)

Rezolvari

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

class numar
{
	protected:
		int n;
	public:
		void afis(char* s)
		{
			cout<<"Numarul "<<s<<" este: "<<n<<endl;
		}
	int retur()
	{
		return n;
	}
};
class numar_d1: public numar
{
	public:
		void cit(char *s)
		{
			cout<<"Citim numarul "<<s<<endl;
			cout<<"\tn=";
			cin>>n;
		}
 
	void aduna(numar_d1 a, numar b)
	{
		n=a.n+b.retur();
	}
};
class numar_d2: public numar_d1
{
//se mai introduce o data privata si se cere retinerea in acesta a patratului numarului declarat precedent
int n;
public:
	numar_d2 operator*()
	{
		numar_d2 a;
		a.n=(numar::n+2);
		return a;
	} 
void afis()
	{
		cout<<"Rezultatul dorit este (am adunat 2 la rezultat): "<<n<<endl;
	}
};
void main()
{
	numar_d2 a,b,c;
	a.cit("a");
	b.cit("b");
	c.aduna(a,b);
	c.numar_d1::afis("a+b");
	numar_d2 d;
	d=*c;
	d.afis();
 
   int k;
   cin>>k;
}

#include <iostream>
using namespace std;
 
class numar
{
	protected:
		int n;
	public:
		numar(int a=5)
		{
			n=a;
			cout<<"Costructorul clasei de baza.\n";
		}
	int& retur()
	{
		return n;
	}
	friend ostream& operator<<(ostream& out,numar a)
	{
		out<<"Numarul este: "<<a.n<<endl;
		return out;
	}
};
 
class numar_d: public numar
{
	public:
	numar_d(int a=10):numar(a) //:numar(a) nu e neaparat obligatoriu a se scrie, acest lucru 
				facandu-se atunci cand avem mai multi constructori in clasa de baza
	{
		cout<<"Costructorul clasei derivate.\n";
		n=a;
	}
 
	/*
- unui obiect dintr-o clasa de baza i se poate atribui un obiect al unei clase care este derivata din ea
- unui obiect al unei clase derivate nu i se poate atribui un obiect al clasei de baza, deoarece o clasa
derivata este o completare a unei clase de baza si nu invers
(Putem insa sa inzestram clasa derivata cu o metoda obtinuta prin supraincarcarea operatorului =.
Dar si aici datele care apartin exclusiv exclusiv clasei derivate iau valori arbitrare.)
	*/
 
	void operator=(numar & x)
	{
		n=x.retur();
	}
};
void main()
{
	numar a;
	cout<<a;
	numar_d b;
	cout<<b;
b=a; //acest lucru nu ar fi fost posibil fara supraincarcarea operatorului =
	cout<<b;
	
	int k;
      cin>>k;
}


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