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

 

рассказать друзьям и получить подарок

Оставить комментарий

Ваш email не будет опубликован. Обязательные поля отмечены *

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Translate Переводчик

Подписка на новости

SmartResponder.ru
Ваш e-mail: *
Ваше имя: *

Хостинг для Wordpress сайтов