Differences

This shows you the differences between two versions of the page.

Link to this comparison view

poo-is:laboratoare:06 [2020/09/29 22:35]
alexandru.ionita99
poo-is:laboratoare:06 [2020/09/29 22:44] (current)
alexandru.ionita99 [5.1. Diferente]
Line 268: Line 268:
  
 ===== 4. Comportamentul metodelor din clasa derivata ===== ===== 4. Comportamentul metodelor din clasa derivata =====
-===== 4.1. Constructorii ​=====+==== 4.1. Constructorii ====
  
   * Din punct de vedere al ordinii, prima oara se apeleaza constructorul / constructorii din clasa de baza si apoi cei din clasa derivata.   * Din punct de vedere al ordinii, prima oara se apeleaza constructorul / constructorii din clasa de baza si apoi cei din clasa derivata.
Line 275: Line 275:
   * Daca implementam un constructor pentru clasa derivata care nu apeleaza un constructor al clasei de baza, atunci, by default, se va apela constructorul fara parametrii al clasei de baza (**acesta trebuie sa existe obligatoriu**,​ daca nu => eroare)   * Daca implementam un constructor pentru clasa derivata care nu apeleaza un constructor al clasei de baza, atunci, by default, se va apela constructorul fara parametrii al clasei de baza (**acesta trebuie sa existe obligatoriu**,​ daca nu => eroare)
  
-===== 4.2. Operatorul ​=====+==== 4.2. Operatorul = ====
  
   *Daca este generat automat, sa va apela operatorul = din clasa (clasele) de baza. Insa, daca este implementat de noi, trebuie sa ne asiguram ca are acest comportament (de a apela operatorul = din clasa de baza).   *Daca este generat automat, sa va apela operatorul = din clasa (clasele) de baza. Insa, daca este implementat de noi, trebuie sa ne asiguram ca are acest comportament (de a apela operatorul = din clasa de baza).
  
-==== 4.3. Destructorul ​=====+==== 4.3. Destructorul ====
  
   *Din punct de vedere al ordinii, prima oara se apeleaza destructorul din clasa derivata si apoi cel din clasa de baza.   *Din punct de vedere al ordinii, prima oara se apeleaza destructorul din clasa derivata si apoi cel din clasa de baza.
Line 298: Line 298:
 Amandoua mecanismele reutilizeaza codul scris pentru o clasa de baza/simpla intr-o alta clasa mai complexa. In ambele cazuri se folosesc liste de initializare pentru constructori pentru a crea obiectele de baza (chiar daca apelul difera prin sintaxa). Amandoua mecanismele reutilizeaza codul scris pentru o clasa de baza/simpla intr-o alta clasa mai complexa. In ambele cazuri se folosesc liste de initializare pentru constructori pentru a crea obiectele de baza (chiar daca apelul difera prin sintaxa).
  
-==== Diferente ====+==== 5.1. Diferente ====
 == Agregarea == == Agregarea ==
   * folosita cand se doreste reutilizarea unui tip de date A pentru generarea altui tip de date B (**fara a prelua interfata lui A**)   * folosita cand se doreste reutilizarea unui tip de date A pentru generarea altui tip de date B (**fara a prelua interfata lui A**)
Line 304: Line 304:
   * utilizatorii noii clase vor vedea doar interfata acesteia   * utilizatorii noii clase vor vedea doar interfata acesteia
   * nu va mai fi de interes interfata clasei de baza   * nu va mai fi de interes interfata clasei de baza
-== Derivare ​==+== Derivarea ​==
   * folosita cand se doreste **preluarea interfetei** clasei de baza   * folosita cand se doreste **preluarea interfetei** clasei de baza
   * utilizatorul va vedea atat interfata clasei de baza cat si a celei derivate   * utilizatorul va vedea atat interfata clasei de baza cat si a celei derivate
Line 310: Line 310:
 <​note>​Nu exista nicio diferenta in termeni de: memorie ocupata si durata de executie.</​note>​ <​note>​Nu exista nicio diferenta in termeni de: memorie ocupata si durata de executie.</​note>​
  
-== Avantaje ​==+== Avantajele derivarii ​==
 <note tip>​Putem sa adaugam cod nou fara a introduce bug-uri in codul existent. <note tip>​Putem sa adaugam cod nou fara a introduce bug-uri in codul existent.
  
Line 317: Line 317:
 Clasele sunt clar separate. (Codul poate fi refolosit si in alte locuri fara a avea erori)</​note>​ Clasele sunt clar separate. (Codul poate fi refolosit si in alte locuri fara a avea erori)</​note>​
  
-===== Mostenire multipla ===== +===== 6. Mostenire multipla ===== 
-== Exemplu ==+==== 6.1. Exemplu ​====
 <code c++> <code c++>
 #include <​iostream>​ #include <​iostream>​
Line 384: Line 384:
   *altele   *altele
 </​note>​ </​note>​
-==== Shadowing, Upcasting ====+===== 7. Shadowing, Upcasting ​=====
 == Shadowing == == Shadowing ==
 <code c++> <code c++>
Line 420: Line 420:
 In aceste cazuri, versiunile metodelor din clasa de baza o sa fie ascunse pentru noua clasa (nu avem acces direct la functiile clasei de baza cu acelasi nume ca cele din clasa derivata). Le putem apela explicit folosind **nume_clasa_baza :: nume_functie**. In aceste cazuri, versiunile metodelor din clasa de baza o sa fie ascunse pentru noua clasa (nu avem acces direct la functiile clasei de baza cu acelasi nume ca cele din clasa derivata). Le putem apela explicit folosind **nume_clasa_baza :: nume_functie**.
 </​note>​ </​note>​
-===== Pragma Once =====+===== 8. Pragma Once =====
 In cazul in care avem ierarhii complicate de clase, trebuie sa avem grija sa nu includem header-ul unei clase de mai multe ori in alt header sau in programul principal. In cazul in care avem ierarhii complicate de clase, trebuie sa avem grija sa nu includem header-ul unei clase de mai multe ori in alt header sau in programul principal.
 <note important>​Putem evita acest lucru daca folosim directiva preprocesor **#pragma once**. Aceasta se scrie la inceputul header-ului.</​note>​ <note important>​Putem evita acest lucru daca folosim directiva preprocesor **#pragma once**. Aceasta se scrie la inceputul header-ului.</​note>​
poo-is/laboratoare/06.1601408102.txt.gz · Last modified: 2020/09/29 22:35 by alexandru.ionita99
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0