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 |
Membri speciali | Index | Polymorphism |