15 Mostenirea

  • Uploaded by: Patrick Johnston
  • 0
  • 0
  • July 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View 15 Mostenirea as PDF for free.

More details

  • Words: 1,079
  • Pages: 5
15. Moştenirea Clasa care este moştenită este numită clasă de bază. Clasa care moşteneşte este numită clasă derivată. O clasă derivată poate fi moştenită la rândul ei. Astfel se creează moştenirea multiplă. public

-

Când specificatorul de acces al unei clase de bază este public: toţi membrii public ai clasei de bază devin membri publici ai clasei derivate, toţi membrii protected ai clasei de bază devin membri protected ai clasei derivate, în toate cazurile: elementele private ale bazei rămân particulare pentru bază şi nu sunt accesibile membrilor clasei derivate. CLASA DE BAZĂ

CLASA DERIVATĂ

private

private

protected MOŞTENIRE  public MOŞTENIRE 

protected  ACCES public  ACCES

#include class B { int a; public: void init_baza(int i) {a = i;} void arata_baza(){cout<
private Când clasa de bază este moştenită prin utilizarea specificatorului de acces private: - toţi membrii public şi protected ai clasei de bază devin membri privaţi ai clasei derivate CLASA DE BAZĂ protected MOŞTENIRE  public MOŞTENIRE  private

CLASA DERIVATĂ private  ACCES  ACCES protected public

N.B. Când un specificator de acces al unei clase de bază este private, membrii publici sau protejaţi ai bazei devin membri particulari ai clasei derivate. Aceasta înseamnă că ei sunt încă accesibili membrilor clasei derivate, dar şi secţiunilor din programul dvs. care nu sunt membri nici ai clasei de bază, nici ai celei derivate. #include class BAZA { int x; protected: int y; public: int z; BAZA(){} BAZA(int i, int j, int k) {x = i; y = j; z = k;} void arata_baza() { cout<<x<<" "<
protected Când se moşteneşte o clasă de bază ca protected, toţi membrii public şi protected ai clasei de bază devin membri protejaţi ai clasei derivate. CLASA DE BAZĂ protected MOŞTENIRE  public MOŞTENIRE  private

CLASA DERIVATĂ protected  ACCES  ACCES private public

Moştenirea din clase de bază multiple class derivat : public baza1, private baza2, protected baza3 etc. Constructori, destructori şi moştenire 1. 2. 3. 4.

Când se construieşte un obiect de clasa derivat: construieşte baza construieşte derivat distruge derivat distruge baza

Transmiterea parametrilor spre constructorii clasei de bază baza(int i) {x = i;} class derivat : public baza derivat(int i, int j) : baza(i) Constructorul lui derivat este declarat aici ca preluând doi parametri, i şi j. Dar derivat() foloseşte doar pe i; j este pasat către baza(). În general, constructorul clasei derivate trebuie să declare atât parametrul/parametrii care este/sunt cerut/ceruţi de el, cât şi pe cel/cei ai clasei de bază. Parametrii ceruţi de baza sunt transmişi acesteia prin constructorul clasei de bază specificate după două puncte. Pentru clasele de bază multiple: baza1(int i){x = i;} baza2(int i){y = i;} class derivat : public baza 1, public baza2 derivat(int i, int j, int k) : baza1(j), baza2(k) Aşadar, argumentele unui constructor al clasei de bază sunt transmise prin intermediul argumentelor constructorului clasei derivate. Chiar în cazul în care constructorul clasei derivate nu preia nici un argument, va fi necesar să declare unu sau mai multe dacă clasa de bază preia unul sau mai multe argumente. În această situaţie, argumentele transmise clasei derivate sunt pur şi simplu transferate bazei. baza1(int i){x = i;} baza2(int i){y = i;} class derivat : public baza1, public baza2 derivat(int i, int j) : baza1(i), baza2(j) ATENŢIE: un argument care este transmis unei clase de bază nu exclude utilizarea sa şi de către o clasă derivată. baza(int i, int j) class derivat : public baza derivat(int i, int j) : baza(i, j)

N.B. Atunci când transmiteţi argumente către constructorii din clasa de bază, argumentele pot să fie orice expresie validă în acel moment, inclusiv apelări de funcţii şi de variabile. Acest lucru este un aspect al faptului că C++ permite iniţializarea dinamică. Permiterea accesului Declararea de acces are forma generală: clasa-de-baza::membru Declararea de acces este pusă în antetul de acces corespunzător din declararea clasei derivate. Reţineţi că într-o declarare de acces nu este necesară (şi nici permisă) o declarare de tip. class BAZA { public: int j; //public in BAZA }; //Mosteneste BAZA ca particular class DERIVAT : private BAZA { public: //aici se afla declararea accesului BAZA::j; //face j din nou public . . . }; Clase de bază virtuale Când două sau mai multe obiecte sunt derivate dintr-o clasă de bază comună, puteţi preveni prezenţa întrunul dintre acestea a mai multor copii ale clasei de bază, declarând-o virtual în momentul când ea este moştenită. Obţineţi aceasta precedând numele clasei de bază cu cuvântul cheie virtual. #include class BAZA { public: int i; }; class DERIVAT_1 : virtual public BAZA { public: int j; }; class DERIVAT_2 : virtual public BAZA { public: int k; }; class DERIVAT_3 : public DERIVAT_1, public DERIVAT_2 { public: int sum; }; void main() { DERIVAT_3 ob; ob.i = 10; //acum nu mai este ambiguuu }

N.B. Chiar dacă atât DERIVAT_1 cât şi DERIVAT_2 specifică BAZA ca fiind virtual, BAZA este încă prezentă în obiectele de acel tip. De exemplu, următoarea secvenţă este perfect validăş //defineste o clasa de tipul DERIVAT_1 DERIVAT_1 clasamea; clasamea.i = 88; #include class BAZA { public: int i; }; class DERIVAT_1 : virtual public BAZA { public: int j; }; class DERIVAT_2 : virtual public BAZA { public: int k; }; class DERIVAT_3 : public DERIVAT_1, public DERIVAT_2 { public: int sum; }; void main() { DERIVAT_3 d3; d3.i = 33; cout<

Related Documents

15 Mostenirea
July 2020 11
15
October 2019 40
15
November 2019 33
15
October 2019 42
15
June 2020 17

More Documents from ""