This shows you the differences between two versions of the page.
poo-is:laboratoare:08 [2020/10/03 11:25] alexandru.ionita99 [Laboratorul 08: Mostenire multipla. Clase si functii abstracte. Interfete] |
poo-is:laboratoare:08 [2020/10/03 11:27] (current) alexandru.ionita99 |
||
---|---|---|---|
Line 7: | Line 7: | ||
* Separate Interface and Implementation (pag. 264-265) | * Separate Interface and Implementation (pag. 264-265) | ||
- | ====== Mostenire Multipla ====== | + | ===== 1. Mostenire Multipla ===== |
Spre deosebire de multe alte limbaje de programare orientate-obiect, C++ permite **mostenirea multipla** (o clasa poate fi derivata din mai multe clase de baza). | Spre deosebire de multe alte limbaje de programare orientate-obiect, C++ permite **mostenirea multipla** (o clasa poate fi derivata din mai multe clase de baza). | ||
<note>In acest caz, la declararea clasei derivate nu se specifica o singura clasa de baza, ci o succesiune de clase de baza, separate prin virgula, avand in fata specificatorii de acces.</note> | <note>In acest caz, la declararea clasei derivate nu se specifica o singura clasa de baza, ci o succesiune de clase de baza, separate prin virgula, avand in fata specificatorii de acces.</note> | ||
Line 13: | Line 13: | ||
<note>In cadrul mostenirii multiple, **constructorii** claselor de baza vor fi apelati in ordinea enumerarii, iar **destructorii** vor fi apelati in ordine inversa.</note> | <note>In cadrul mostenirii multiple, **constructorii** claselor de baza vor fi apelati in ordinea enumerarii, iar **destructorii** vor fi apelati in ordine inversa.</note> | ||
- | ==== Problema Diamantului ==== | + | ==== 1.1. Problema Diamantului ==== |
Desi mostenirea multipla pare a fi un procedeu util, aceasta poate duce la multe ambiguitati, cea mai mare dintre acestea fiind **Problema Diamantului** (numita si **“death diamond”**). Sa consideram urmatoarea ierarhie de clase: | Desi mostenirea multipla pare a fi un procedeu util, aceasta poate duce la multe ambiguitati, cea mai mare dintre acestea fiind **Problema Diamantului** (numita si **“death diamond”**). Sa consideram urmatoarea ierarhie de clase: | ||
Line 32: | Line 32: | ||
<note>Pentru a se crea un obiect de tip **Snake**, se vor apela constructorii claselor **Animal** and **Reptile**, dar se va apela o singura data constructorul clasei **LivingThing**, astfel **Snake** va avea o singura instanta a clasei **LivingThing**.</note> | <note>Pentru a se crea un obiect de tip **Snake**, se vor apela constructorii claselor **Animal** and **Reptile**, dar se va apela o singura data constructorul clasei **LivingThing**, astfel **Snake** va avea o singura instanta a clasei **LivingThing**.</note> | ||
- | ====== Clase si Functii Abstracte ====== | + | ===== 2. Clase si Functii Abstracte ===== |
O metoda virtuala se numeste **abstracta (pura)** daca nu are implementare: | O metoda virtuala se numeste **abstracta (pura)** daca nu are implementare: | ||
Line 73: | Line 73: | ||
</note> | </note> | ||
- | ====== Interfete ====== | + | ===== 3. Interfete ===== |
<note>O clasa fara atribute si cu toate metodele abstracte se numeste **interfata**.</note> | <note>O clasa fara atribute si cu toate metodele abstracte se numeste **interfata**.</note> |