Daca exista o ierarhie de clase derivate, atributele sunt mostenite prin aplicarea recursiva a regulilor din tabelul de mai sus. In esenta deci, atributul protected al unui membru al clasei face ca el sa fie vizibil intr-o clasa derivata cu specificatorii de acces public sau protected.
Trebui inteles ca un obiect de tipul DERIVATA este un obiect de tip BAZA, reciproca nefiind adevarata. Aceasta face ca un pointer de tipul:
DERIVATA *pd;
sa poata primi ca valoare o adresa de tipul & BAZA fara nici o conversie de tip.
Constructorul unei clase derivate se defineste astfel:
DERIVATA (lista argumente) : BAZA (lista argumente)
{
...
}
ceea ce inseamna ca se va apela intii constructorul clasei BAZA cu argumentele specificate. Unele argumente din apelul constructorului BAZA pot fi preluate din lista de argumente a clasei DERIVATA. Sa consideram exemplul definirii unor clase pentru gestiunea informatiilor despre studenti.
enum an_studii { unu, doi, trei, patru, cinci, graduate };
class student {
public:
student (char *, int, double, an_studii);
void print() const;
protected:
int student_id;
double medie;
an_studii an;
char nume[50];
};
Constructorul se defineste in mod evident:
student::student (char *n, int id, double m, an_studii i)
{
student_id = id;
medie = x;
an = i;
strcpy (nume, n);
}
O forma alternativa este:
student::student (char *n, int id, double m, an_studii i) :
student_id(id), medie(x), an(i) {
strcpy (nume, n);
}
ca si cum student_id, medie si an ar fi clase de baza ale clasei student (desi acestea sunt tipuri elementare).
Sa definim acum o clasa grad_student, bazata pe student:
class grad_student public student {
protected:
char titlu_teza[50];
char catedra[25];
public:
grad_student(char *, int, double, char *, char *);
void print() const;
};
care introduce cimpurile suplimentare titlu_teza si catedra, constructorul adecvat si redefineste (overloading) functia print. Ceilalti membri ai clasei de baza student sunt mosteniti ca atare. Constructorul clasei este de forma:
grad_student::grad_student(char *n, int id, double m, char *titlu, char *cat) :
student(n, id, m), an_studii(graduate) {
strcpy(titlu_teza, titlu);
strcpy(catedra, cat);
}
Documentul este oferit gratuit,
trebuie doar să te autentifici in contul tău.