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ă