prieten
.prieten
:
|
|
24 |
dublare
este un prieten al clasei Dreptunghi
. De aceea, funcția dublare
poate să acceseze membrii latime
și inaltime
(care sunt privați) ai diverselor obiecte de tip Dreptunghi
. Să observăm că, deși nici în declarația funcției dubleaza
nici în apelul ei ulterior din main
, funcția membru dubleaza
nu este considerată un membru al clasei Dreptunghi
. Nu este! Ea doar are acces la membrii privați și protejați, fără a fi membru.
|
|
16 |
Dreptunghi
este prieten al clasei Patrat
ceea ce permite ca funcțiile membru ale lui Dreptunghi
să aibă acces la membrii privați și protejați ai lui Patrat
. Concret, Dreptunghi
accesează variabila membru Patrat::latura
, care reprezintă latura pătratului.Patrat
. Aceasta este necesară deoarece clasa Dreptunghi
folosește Patrat
(ca parametru în funcția converteste
), iar Patrat
folosește Dreptunghi
(declarând-o ca prieten). Dreptunghi
este considerată ca o clasă prieten a lui Patrat
, dar Patrat
nu este considerată ca prieten al lui Dreptunghi
. De aceea, funcțiile membru ale lui Dreptunghi
pot accesa membrii privați și protejați ai lui Patrat
dar nu și reciproc. Desigur, am putea să declarăm Patrat
ca prieten al lui Dreptunghi
, dacă ar fi necesar, permițând și accesul în sens invers.Poligon
, pe care să o derivăm în alte doua clase: Dreptunghi
și Triunghi
:Poligon
contine membri comuni pentru ambele tipuri de poligoane. În cazul nostru: latime
și inaltime
. Iar clasele Dreptunghi
și Triunghi
reprezintă clase derivate, având caracteristici și funcționalități diferite de la un tip de poligon la altul.A
și creăm o clasă derivată care are un membru B
, aceasta din urmă conține atât pe A
cât și pe B
.
class nume_clasă_derivată: public nume_clasă_bază
{ /*...*/ };
nume_clasă_derivată
este numele clasei derivate și nume_clasă_bază
este numele clasei care stă la bază. Specificatorul de acces public
poate fi înlocuit cu orice alt specificator de acces (protected
sau private
). Acest specificator limitează la nivelul cel mai accesibil pentru membrii moșteniți de la clasa de bază: membrii cu un nivel de accesibilitate mai mare sunt moșteniți cu acest nivel, în timp ce membrii cu un nivel de acces egal sau mai restrictiv își vor păstra restricția în clasa derivată.
|
|
20 10 |
Dreptunghi
și Triunghi
conțin membrii moșteniți de la Poligon
. Aceștia sunt: latime
, inaltime
și seteaza_valori
.protected
folosit în clasa Poligon
este similar lui private
. singura diferență apare în legătură cu moștenirea: când o clasă o mostenește pe alta, membrii clasei derivate pot accesa membrii protejați moșteniți de la clasa de bază, dar nu și membrii privați.latime
și inaltime
cu protected
în loc de private
, acești membri vor fi accesibili și pentru clasele derivate Dreptunghi
și Triunghi
, față de accesarea doar de catre membrii clasei Poligon
. Dacă s-ar fi declarat cu public, ar fi putut fi accesați de oriunde.Access | public | protected | private |
---|---|---|---|
membrii aceleiași clase | da | da | da |
membrii claselor derivate | da | da | nu |
ne-membri | da | nu | nu |
main
, din altă clasă sau dintr-o funcție oarecare.Dreptunghi
și Triunghi
au aceleași permisiuni de acces ca și cum ar fi aparținut clasei de bază Poligon
:
|
|
public
pentru fiecare dintre clasele derivate:
|
|
public
de după (:
) permite membrilor moșteniți de la clasa părinte (în cazul acesta Poligon
) accesibilitate maximă pe care îl vor avea clasele derivate (în acest caz Dreptunghi
). Deoarece cuvântul public
rezervă nivelul maxim de accesibilitate, utilizarea sa permite clasei derivate să moștenească toți membrii cu același nivel ca în clasa de bază.protected
, toți membrii publici ai clasei de bază sunt moșteniți ca protected
în clasa derivată. Reciproc, dacă este speficiat cel mai restrictiv nivel (private
), toți membrii clasei de bază sunt moșteniți ca private
și de aceea nu pot fi accesați din clasa derivată.
|
|
Fiica
moșteniți de la mamă să fie setați cu nivelul de acces cel mai puțin restrictiv cu ajutorul lui protected
. Adică, toți membrii cu specificatorul de acces public
din Mama
vor deveni protected
în Fiica
. Bineînțeles, aceasta nu restricționează Fiica
de la a avea declarați proprii membri publici. Acel cel mai puțin restrictiv nivel de acces este setat numai pentru membrii moșteniți de la Mama
.class
și public pentru cele declarate cu struct
.
nume_constructor_derivat (parameteri) : nume_constructor_bază (parameteri) {...}
|
|
Mama: fara parameteri Fiica: parametru de tip int Mama: parametru de tip int Fiu: parameteru de tip int |
Mama
la crearea unui nou obiect Fiica
și varianta cu un obiect Fiu
. Se datorează declarațiilor diferite de constructor pentru Fiica
și Fiu
:
|
|
Iesire
, și vrem ca Dreptunghi
și Triunghi
să o moștenească și pe ea, pe lângă clasa Poligon
, vom scrie:
|
|
|
|
20 10 |
Previous: Membri speciali | Index | Next: Polymorphism |