7.2. Controlul accesului la mo?tenire
7.2. Controlul accesului la mo?tenire
Clasa derivat?, care mo?tene?te de la o singur? clas? de baz? (se admite mo?tenirea ?i de la mai multe clase, a?a-numita mo?tenire multipl?), este definit? dup? urm?toarea form? general?:
class nume_clas?_derivat?: [mod_mo?tenire] nume_clas?_de_baz?{ [date_func?ii_prototipuri_prieteni]
[specificator_de_acces: date_func?ii_prototipuri_prieteni specificator_de_acces: date_func?ii_prototipuri_prieteni … specificator_de_acces: date_func?ii_prototipuri_prieteni] } [list?_de_obiecte]; [defini?ia_func?iei_membre_sau_prietene defini?ia_func?iei_membre_sau_prietene … defini?ia_func?iei_membre_sau_prietene] |
Aceasta era forma general? pentru cazul c?nd clasa derivat? mo?tene?te de la o singur? clas? de baz? (engl. single inheritance). ?n C++ este posibil? ?i mo?tenirea multipl?, ea va fi descris? aparte.
De la o clas? de baz? putem crea mai multe clase derivate, fiecare dintre care corespunz?nd cerin?elor aplica?iei. Astfel, ob?inem o extindere ?n l??ime. Orice clas? derivat? poate servi ca o clas? de baz? pentru o alt? clas? derivat?, ?i a?a mai departe. Ca rezultat avem o extindere a ierarhiei. Astfel, se creeaz? genera?ii de clase de baz? ?i de clase derivate. Procesele cu a?a extinderi nu sunt limitate.
?n memoria alocat? pentru un obiect derivat, mai ?nt?i vor fi alocate c?mpurile mo?tenite de la clasa de baz? ?i apoi c?mpurile declarate ?n defini?ia clasei derivate, ?n ordinea apari?iei lor.
Specificatorul mod_mo?tenire indic? ce tip de acces vor avea membrii mo?teni?i ?n clasa derivat?. Tipul lor de acces ?n clasa derivat? depinde de tipul lor de acces ?n clasa de baz? ?i de modul de mo?tenire, conform Tabelului 7.1. Dac? specificatorul mod_mo?tenire va fi omis, atunci, implicit, pentru clase va fi considerat modul de mo?tenire private, pe c?nd pentru structuri (?n loc de class se folose?te cuv?ntul-cheie struct), implicit, va fi considerat modul de mo?tenire public.
Din acest Tabel observ?m c?, independent de modul de mo?tenire, membrii priva?i ai clasei de baz? nu vor fi accesibili direct ?n clasa derivat?.
Tabelul 7.1. Tipul de acces ?n clasa derivat? la un membru mo?tenit
Modul de mo?tenire ? |
public | protected | private |
Tipul de acces la un membru ?n clasa de baz? ? | |||
public | public | protected | private |
protected | protected | protected | private |
private | Nu este accesibil | Nu este accesibil | Nu este accesibil |
Modul de acces public nu schimb? tipul de acces la membrii publici ?i proteja?i. Modul de mo?tenire protected modific? to?i membrii publici, mo?teni?i de la clasa de baz?, ?n membri proteja?i din clasa derivat?. Dac? modul de mo?tenire este private, atunci to?i membrii – ?i publici ?i proteja?i, mo?teni?i de la clas? de baz?, vor fi modifica?i ?n membri priva?i din clasa derivat?.
_________________________
Autorul: dr.conf. S. Pereteatcu
Оставить комментарий