Sunteți pe pagina 1din 4

Subiect 5.

Mostenirea simpla
Mostenirea simpla este o relatie binara intre 2 clase,una fiind clasa de baza,alta fiind clasa derivata.Acea
clasa derivate va prelua toate proprietatile clasei de baza pe care o mosteneste.Dintre problem aparute
pe principiul mostenirii sunt urmatoarele:

-daca intr-o clasa derivate declaram un obiect al unei clase de baza urmand ca acesta sa apeleze
elemente protejate in ierarhie definite in clasa de baza,acestea nu vor fi accesibile

-nu se pot transfera informatii dinspre clasa de baza inspre clasa derivata decat in urma supraincarcarii
explicite a operatorului =(operatorul de atribuire)

-constructorii si destructorii sunt metode care nu se mostenesc,astfel incat constructorul unei clase
derivate apeleaza intai constructorul clasei de baza,in cazul destructorilor,operatiunea facandu-se invers

-daca in intermediul unei ierarhii de clasa denumirile unei date sau antetele unor metode
coincid,prioritare vor fi cele din clasa derivata, cele din clasa de baza fiind accesate prin:
nume_clasa_baza::data/metoda;

Sintaxa unei relatii de mostenire:

class baza
{
private:
date|metode
protected:
date|metode
public:
date|metode
};

class derivata: private|public baza


{
elemente_specifice_clasei_derivate
};

Explicatii:

Dupa cum se vede apare un nou specificator de protectie(protected) utilizabil pentru accesibilitatea
datelor intr-o ierarhie de clase.

In linia de mostenire apare private/public, utilizarea lor se poate observa in tabelul de mai jos cu
controlul accesului la membrii mosteniti:

Elementele in clasa de baza Specificatorul din lista de Rezultatul in clasa derivata


mostenire
private private inaccesibil
protected private private
public private private
private public inaccesibil
protected public protected
public public public

Se considera o clasa Pereche, ce contine date despre o pereche de numere intregi si un constructor ce
va permite initierea la declaratie a informatiei. Din clasa Pereche, deriva o clasa Complex, care, preia
informatia din Pereche, ataseaza un nume, si prelucreaza numerele complexe, prin afisarea si suma
acestora. De asemenea, se cere supraîncarcarea operatorului “=” pentru realizarea operaţiilor de
conversie dinspre Pereche spre Complex.

1) Varianta simpla, fara operatorul de “=” supraincarcat

#include<iostream>
using namespace std;

class pereche
{
protected:
int a,b;
public:
pereche(int x, int y)
{
a=x;
b=y;
}
};

class complex:pereche //private pereche


{
char* s;
public:
complex(int x=0, int y=1, char p[]=NULL):pereche(x,y)
{
s=p;
}
friend ostream& operator<<(ostream& x, complex z)
{
x<<"Nr. complex "<<z.s<<" este: ("<<z.a<<','<<z.b<<")\n";
return x;
}
};

int main()
{
complex z1(3,4,"z1"), z2(-6,2,"z2");

//afisarea numerelor complexe


cout<<z1;
cout<<z2;

system("pause");
return (0);
}

2) Varianta extinsa – cu operatorul de atribuire supraincarcat

#include<iostream>
using namespace std;

class pereche
{
protected:
int a,b;
public:
pereche(int x, int y)
{
a=x;
b=y;
}
int& parte_re()
{
return a;
}
int& parte_im()
{
return b;
}
};

class complex:pereche //private pereche


{
char* s;
public:
complex(int x=0, int y=1, char p[]=NULL):pereche(x,y)
{
s=p;
}
friend ostream& operator<<(ostream& x, complex z)
{
x<<"Nr. complex "<<z.s<<" este: ("<<z.a<<','<<z.b<<")\n";
return x;
}
void operator=(pereche& r)
{
(*this).a=r.parte_re();
b=r.parte_im();
}

};

int main()
{
complex z1(3,4,"z1"), z2(-6,2,"z2");

//afisarea numerelor complexe


cout<<z1;
cout<<z2;

pereche t(5,-9);
complex z3(0,0,"z3");
z3=t;
cout<<z3;

system("pause");
return (0);
}

S-ar putea să vă placă și