Moștenire în moștenire



Moștenirea în C ++

moștenire

    • Moștenirea este un mecanism pentru obținerea unei clase noi pe baza unei clase existente. O clasă existentă poate fi extinsă sau modificată pentru a crea o clasă nouă.
    • Persoana
    • Studentul muncitor
    • Personalul didactic
    • Membru al echipei
    • Structura ierarhică a moștenirii


De ce aveți nevoie de moștenire

clasa nume_clasă. listă bază_clasă

Cod reutilizare - folosind o clasă pentru a crea obiecte și ca o clasă de bază pentru a crea o clasă nouă

Construirea unei ierarhii de clase vă permite să clasificați clasele

La moștenire este posibilă extinderea caracteristicilor unei clase, îngustarea, schimbarea sau distrugerea acestora









Accesul la moștenire



Accesul la moștenire



Moștenire simplă

Nu este moștenit:

  • constructori;
  • destructori;
  • Operațiuni suprimate noi;
  • Operațiuni de atribuire redefinite;
  • Relații de prietenie


Moștenire simplă

Clasa are o clasă de bază



Ordinea de a apela constructorii - de la clasa de bază (primul, al doilea, al treilea)



Procedura de apelare a distrugătorilor este ordinea inversă



Reguli pentru moștenirea diferitelor metode

Constructorii nu sunt moșteniți, astfel încât clasa derivată trebuie să aibă constructori proprii

Dacă nu există apel explicit către constructorul clasei derivate în constructorul de clasă derivat, se numește constructorul de bază implicit

Cu o ierarhie cu mai multe niveluri, apelurile constructorilor încep la cel mai înalt nivel

Dacă clasa conține obiecte dintr-o altă clasă, atunci sunt numiți mai întâi constructorii membrilor clasei și apoi constructorul clasei

Operația de atribuire nu este moștenită. Trebuie să fie definită explicit în clasa derivată.

Distrugătorii nu sunt moșteniți. Dacă destructorul din clasa derivată nu este definit, acesta este format în mod implicit și sună distrugătorii clasei de bază și în ordine inversă la apelul constructorilor.









Polimorfism. Funcții virtuale

Legarea mai veche sau dinamică

clasa Baza

virtual void print ()

dp -> imprimare (); // dir

p -> imprimare (); // dir



Ierarhia de clasă, definită printr-o moștenire deschisă, creează un set conex de tipuri definite de utilizator pe care indicatorul clasei de bază poate să le indice către toate obiectele. Alegerea funcției virtuale care va fi apelată va depinde de tipul obiectului la care este direcționat indicatorul (la momentul executării programului) și nu de tipul indicelui.

Ierarhia de clasă, definită printr-o moștenire deschisă, creează un set conex de tipuri definite de utilizator pe care indicatorul clasei de bază poate să le indice către toate obiectele. Alegerea funcției virtuale care va fi apelată va depinde de tipul obiectului la care este direcționat indicatorul (la momentul executării programului) și nu de tipul indicelui.



Polimorfism. Funcții virtuale

clasa Baza

protejat: int h, r;

Baza (int a, int b): h (a), r (b) <>

virtual double f1 () // Cilindru

void f2 ()

Clase abstracte Funcții virtuale pure

Rezumatul este o clasă în care există cel puțin o funcție virtuală pură (goală).

O virtuală pură este o funcție componentă care are următoarea definiție:

tipul virtual nume_funcție (list_form_parameters) = 0;

O funcție virtuală pură nu face nimic și nu este disponibilă pentru apeluri. Scopul său este de a servi drept bază pentru înlocuirea funcțiilor în clasele derivate.

O clasă abstractă poate fi utilizată doar ca clasă de bază pentru clasele derivate.

În comparație cu clasele obișnuite, clasele abstracte utilizează "drepturi limitate". Și anume:

este imposibil să creați un obiect al unei clase abstracte;

o clasă abstractă nu poate fi utilizată pentru a specifica tipul unui parametru de funcție sau tipul unei valori returnate de o funcție;

clasa abstractă nu poate fi utilizată cu distribuții explicite; în același timp, puteți defini pointeri și referințe la o clasă abstractă.

un obiect de clasă abstractă nu poate fi un parametru formal al unei funcții, dar un parametru formal poate fi un indicator al unei clase abstracte.



Clase abstracte Funcții virtuale pure



Clase și moștenire abstractă

persoană de clasă



Moștenire multiplă



Apelarea constructorilor de clase de bază



Caracteristicile moștenirii multiple



Clase virtuale de bază



Ordinea de a apela destructori atunci când folosesc clase de bază virtuale

Call destructors în ordine inversă





Rezoluția vizibilității







Articole similare

Trimiteți-le prietenilor: