Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java...
Transcript of Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java...
![Page 1: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/1.jpg)
LECTOR ADRIAN RUNCEANU
Programare orientată pe obiecte
Universitatea “Constantin Brâncuşi” din Târgu-Jiu
Facultatea de Inginerie
Departamentul de Automatică, Energie şi Mediu
![Page 2: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/2.jpg)
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
2
Curs 7
Clase derivate. Moştenire
![Page 3: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/3.jpg)
Curs 7
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
3
1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele unei clase
derivate şi obiectele clasei de bază 1.2. Supraîncărcarea funcţiilor 2. Accesul la membrii unei clase derivate 3. Constructori şi destructori în clasele
derivate 4. Utilitatea claselor derivate
![Page 4: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/4.jpg)
1. Noţiuni de bază care privesc moştenirea
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
4
Prin moştenire se înţelege acea
proprietate a claselor prin care un tip
nou construit poate prelua datele şi
metodele unui tip mai vechi.
În C++ acest mecanism mai este
cunoscut sub numele derivarea
claselor.
![Page 5: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/5.jpg)
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
5
Evident, clasei nou construite i se pot adauga noi date si metode.
Prin acest procedeu se preia soft deja facut care se dezvolta.
Avantajul urias al acestui procedeu este ca persoana care reia un anumit soft trebuie sa cunoasca doar documentatia de utilizare a soft-ului preluat.
1. Noţiuni de bază care privesc moştenirea
![Page 6: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/6.jpg)
1. Noţiuni de bază care privesc moştenirea
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
6
Ideea de baza este urmatoarea: Fiind date clasele C1, C2, …., Cn, putem
construi clasa Cn+1 care are, pe langa datele si metodele claselor enumerate, date si metode proprii.
Clasele C1, C2, …., Cn se numesc clase de bază
Clasa Cn+1 se numeste clasa derivată
![Page 7: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/7.jpg)
1. Noţiuni de bază care privesc moştenirea
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
7
Forma simplificata prin care o clasa se obtine din derivarea altei clase este urmatoarea:
Semnificatia este: clasa C1 este derivata din
clasa de baza C, iar clasa C este clasa care se deriveaza.
class C1:public C {…….}
![Page 8: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/8.jpg)
1. Noţiuni de bază care privesc moştenirea
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
8
Exemplul 1 Clasa numar contine o data membru n, si o
metoda membru tip(). Clasa numar_d este derivata din clasa
numar. Prin urmare, un obiect obtinut prin
instantierea acesteia, are data membru n si metoda tipar().
Pe langa aceasta, clasa numar_d are o noua metoda numita citire().
![Page 9: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/9.jpg)
1. Noţiuni de bază care privesc moştenirea
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
9
#include<iostream.h> class numar{ public: int n; void tipar() { cout<<n<<endl; } };
![Page 10: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/10.jpg)
1. Noţiuni de bază care privesc moştenirea
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
10
class numar_d : public numar{ public: void citire() { cout<<"n = "; cin>>n; } };
![Page 11: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/11.jpg)
1. Noţiuni de bază care privesc moştenirea
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
11
int main(void) { numar_d a; a.citire(); a.tipar(); }
![Page 12: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/12.jpg)
1. Noţiuni de bază care privesc moştenirea
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
12
Dupa executia programului se obtin urmatoarele rezultate:
![Page 13: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/13.jpg)
1. Noţiuni de bază care privesc moştenirea
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
13
Exemplul 2 Clasa complex ne permite sa lucram usor cu
numere complexe. In timpul utilizarii acestei clase am observat
ca ar fi bine sa contina o metoda booleana numita real(), care sa ne permita sa testam daca numarul complex este real sau nu.
Dispunem de documentatia clasei complex. Vom defini o noua clasa numita complex_d
care sa contina datele si metodele clasei complex si, in plus, sa contina si o noua metoda.
![Page 14: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/14.jpg)
1. Noţiuni de bază care privesc moştenirea
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
14
#include<iostream.h> #include "complex.cpp“ // fisier in care este
declarata si definita clasa complex
class complex_d : public complex{ public: int parte_reala(); };
![Page 15: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/15.jpg)
1. Noţiuni de bază care privesc moştenirea
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
15
int complex_d::parte_reala() { return imag==0; }
![Page 16: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/16.jpg)
1. Noţiuni de bază care privesc moştenirea
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
16
int main(void) { complex_d z; z.real = 3; z.imag = 1; if(z.parte_reala()) cout<<"numarul este real"; else cout<<"numarul nu este real"; }
![Page 17: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/17.jpg)
1. Noţiuni de bază care privesc moştenirea
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
17
Clasa complex se include in aceasta
zona NOTA: Clasa complex nu
contine functia main()!!!!!!!!
![Page 18: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/18.jpg)
Curs 7
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
18
1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele unei clase
derivate şi obiectele clasei de bază 1.2. Supraîncărcarea funcţiilor 2. Accesul la membrii unei clase derivate 3. Constructori şi destructori în clasele
derivate 4. Utilitatea claselor derivate
![Page 19: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/19.jpg)
1.1. Atribuiri între obiectele unei clase derivate şi obiectele clasei de bază
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
19
Unui obiect al clasei de baza i se poate atribui un obiect al unei clase care este derivata din ea.
Unui obiect al unei clase derivate nu i se poate atribui un obiect al clasei de baza.
De ce? Pentru ca in clasa derivata avem date si
metode in plus fata de clasa de baza! si nu putem sti ce valori vor primi acestea in cazul unei astfel de atribuiri.
![Page 20: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/20.jpg)
1.1. Atribuiri între obiectele unei clase derivate şi obiectele clasei de bază
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
20
Putem totuși supraîncărca operatorul “=” în clasa derivată.
Dar și aici datele care aparțin exclusiv clasei derivate vor lua valori arbitrare (în exemplul următor valoarea 0).
![Page 21: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/21.jpg)
1.1. Atribuiri între obiectele unei clase derivate şi obiectele clasei de bază
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
21
Exemplul 3 #include<iostream.h> class numar{ public: int m; // informatie specifica clasei de baza
};
![Page 22: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/22.jpg)
1.1. Atribuiri între obiectele unei clase derivate şi obiectele clasei de bază
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
22
class numar_d : public numar{ public: int n; // informatie specifica clasei derivate
void operator=(numar &x) { m=x.m; n=0; } };
![Page 23: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/23.jpg)
1.1. Atribuiri între obiectele unei clase derivate şi obiectele clasei de bază
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
23
int main(void) { numar a; numar_d b; b.m=3; b.n=4; a=b; cout<<a.m<<endl; b=a; // nu ar fi permisa cout<<b.m<<" "<<b.n<<endl; }
![Page 24: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/24.jpg)
1.1. Atribuiri între obiectele unei clase derivate şi obiectele clasei de bază
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
24
Dupa executia programului se obtin urmatoarele rezultate:
![Page 25: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/25.jpg)
Curs 7
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
25
1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele unei clase
derivate şi obiectele clasei de bază 1.2. Supraîncărcarea funcţiilor 2. Accesul la membrii unei clase derivate 3. Constructori şi destructori în clasele
derivate 4. Utilitatea claselor derivate
![Page 26: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/26.jpg)
1.2. Supraîncărcarea funcţiilor
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
26
Se stie ca functiile pot fi supraincarcate.
Dar o clasa derivata poate contine o
functie cu acelasi nume si cu aceeasi lista de parametrii formali ca una a clasei de baza?
Raspunsul este afirmativ.
![Page 27: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/27.jpg)
1.2. Supraîncărcarea funcţiilor
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
27
In exemplul urmator:
clasa de baza numar are o metoda numita tipar(), in care lista parametrilor este vida
clasa derivata numar_d are pe langa metoda tipar(), mostenita, o alta metoda numita tot tipar(), tot cu lista parametrilor vida
![Page 28: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/28.jpg)
1.2. Supraîncărcarea funcţiilor
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
28
Prin a.tipar() se apeleaza metoda tipar() proprie clasei derivate.
In cazul in care dorim sa apelam metoda tipar() a clasei de baza scriem: a.numar::tipar().
Cele doua metode cu acelasi nume difera doar prin mesajul afisat inaintea tiparirii valorii retinute de variabila.
![Page 29: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/29.jpg)
1.2. Supraîncărcarea funcţiilor
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
29
Exemplul 4
#include<iostream.h> class numar{ public: int i; void tipar() { cout<<"numar "<<i<<endl; } };
![Page 30: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/30.jpg)
1.2. Supraîncărcarea funcţiilor
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
30
class numar_d : public numar{ public: void tipar() { cout<<"numar_d "<<i<<endl; } };
![Page 31: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/31.jpg)
1.2. Supraîncărcarea funcţiilor
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
31
int main(void) { numar_d a; a.i = 3; a.tipar(); a.numar::tipar(); }
![Page 32: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/32.jpg)
1.2. Supraîncărcarea funcţiilor
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
32
Dupa executia programului se obtin urmatoarele rezultate:
![Page 33: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/33.jpg)
1.2. Supraîncărcarea funcţiilor
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
33
Mai există situația în care, în clasa derivată să definim o dată membru cu același nume cu o dată din clasa de bază.
Nu se semnalează eroare în acest caz. Iar un obiect rezultat ca o instanțiere a unei clase
derivate va avea două date cu același nume. Implicit se adresează data definită în clasa
derivată, dar este posibil să adresăm și data din clasa de bază la fel ca și în cazul funcțiilor.
![Page 34: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/34.jpg)
1.2. Supraîncărcarea funcţiilor
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
34
Exemplul 5
#include<iostream.h> class numar{ public: int i; }; class numar_d : public numar{ public: int i; };
![Page 35: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/35.jpg)
1.2. Supraîncărcarea funcţiilor
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
35
int main(void) { numar_d a; a.i=2; a.numar::i=3; cout<<a.i<<" "<<a.numar::i; }
a.i – informatie proprie, din clasa derivata
a.numar::i – informatie preluata din clasa de baza
![Page 36: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/36.jpg)
1.2. Supraîncărcarea funcţiilor
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
36
Dupa executia programului se obtin urmatoarele rezultate:
![Page 37: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/37.jpg)
Curs 7
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
37
1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele unei clase
derivate şi obiectele clasei de bază 1.2. Supraîncărcarea funcţiilor 2. Accesul la membrii unei clase derivate 3. Constructori şi destructori în clasele
derivate 4. Utilitatea claselor derivate
![Page 38: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/38.jpg)
2. Accesul la membrii unei clase derivate
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
38
Membrii unei clase (date si metode) sunt de trei
feluri:
Publici – precedati de cuvantul cheie public: Acestia
pot fi accesati din exteriorul clasei.
Privati – precedati de cuvantul cheie private:
Stim ca, implicit membrii unei clase sunt privati.
Membrii private ai unei clase nu pot fi accesati din
exteriorul clasei, decat din interiorul clasei respective.
![Page 39: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/39.jpg)
2. Accesul la membrii unei clase derivate
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
39
Protejati – precedati de cuvantul cheie protected:
Pana acum nu am folosit acest tip de membri. Rolul lor apare in momentul in care clasa
este derivata. Ei nu pot si accesati din exterior (la fel ca si
membrii privati), dar pot fi accesati din clasele derivate.
![Page 40: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/40.jpg)
2. Accesul la membrii unei clase derivate
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
40
Exista trei modalitati in care o clasa poate fi mostenita
(derivata):
1. class numar_d: public numar
{
. . .
};
2. class numar_d: private numar
{
. . .
};
3. class numar_d: protected numar
{
. . .
};
![Page 41: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/41.jpg)
2. Accesul la membrii unei clase derivate
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
41
1. A fost mostenita clasa precedata de cuvantul cheie public:
- membrii publici ai clasei de baza raman public si in clasa derivata
- membrii privati ai clasei de baza raman private si in clasa derivata
- membrii protejati ai clasei de baza raman protected si in clasa derivata
![Page 42: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/42.jpg)
2. Accesul la membrii unei clase derivate
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
42
2. A fost mostenita precedata de cuvantul cheie private:
In aceasta situatie clasa derivata are toti
membrii private. In schimb, in interiorul clasei derivate
putem accesa membrii publici si membrii protejati ai clasei de baza.
![Page 43: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/43.jpg)
2. Accesul la membrii unei clase derivate
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
43
3. A fost mostenita precedata de cuvantul cheie protected:
In aceasta situatie, membrii public si
protected ai clasei de baza sunt protejati pentru noua clasa, iar cei private ai clasei de baza raman private si pentru clasa derivata
Din interiorul clasei derivate putem accesa membrii public si private ai clasei de baza
![Page 44: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/44.jpg)
2. Accesul la membrii unei clase derivate
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
44
Forma generala a unei clase derivate: class nume : [public sau private sau protected] nume_1, : [public sau private sau protected]
nume_2, . . . : [public sau private sau protected]
nume_n { . . . };
![Page 45: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/45.jpg)
Curs 7
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
45
1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele unei clase
derivate şi obiectele clasei de bază 1.2. Supraîncărcarea funcţiilor 2. Accesul la membrii unei clase derivate 3. Constructori şi destructori în clasele
derivate 4. Utilitatea claselor derivate
![Page 46: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/46.jpg)
3. Constructori şi destructori
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
46
În cazul în care definim o clasă derivată a unei clase de bază, constructorii și destructorii au un comportament specific.
Exemplul 6 Clasa numar_d mosteneste clasa numar.
Fiecare dintre ele este inzestrata cu un constructor.
Cei doi constructori difera doar prin sirul afisat. La declararea unui obiect care instantiaza clasa
derivata se tipareste “numar” apoi “numar_d”.
![Page 47: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/47.jpg)
3. Constructori şi destructori
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
47
#include<iostream.h> class numar{ public: numar() { cout<<"numar \n"; } };
![Page 48: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/48.jpg)
3. Constructori şi destructori
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
48
class numar_d : public numar{ public: numar_d() { cout<<"numar_d \n"; } }; int main(void) { numar_d a; }
![Page 49: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/49.jpg)
3. Constructori şi destructori
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
49
Dupa executia programului se obtin urmatoarele rezultate:
Astfel se observa ca la declarea unui obiect se apeleleaza mai intai constructorul clasei de baza si apoi cel al clasei derivate.
![Page 50: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/50.jpg)
3. Constructori şi destructori
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
50
Lucrurile se complica atunci cand in clasa de baza avem mai multi constructori, iar in clasa derivata, la fel, alti constructori specifici clasei respective.
![Page 51: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/51.jpg)
3. Constructori şi destructori
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
51
Exemplul 7 #include<iostream.h> class numar{ public: numar() { cout<<"numar \n"; } numar(int k) { cout<<"numar "<<k<<endl; } };
Clasa numar are doi constructori:
- unul fara parametri
- al doilea cu un parametru implicit
![Page 52: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/52.jpg)
3. Constructori şi destructori
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
52
class numar_d : public numar{ public: numar_d() { cout<<"numar_d \n"; } numar_d(int k) : numar(k) { cout<<"numar_d "<<k<<endl; } };
In mod asemanator, clasa derivata,
numar_d are, de asemenea, doi
constructori, unul fara parametru si
unul cu un parametru implicit.
![Page 53: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/53.jpg)
3. Constructori şi destructori
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
53
int main(void) { numar_d a, b(1); }
![Page 54: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/54.jpg)
3. Constructori şi destructori
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
54
Dupa executia programului se obtin urmatoarele rezultate:
![Page 55: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/55.jpg)
3. Constructori şi destructori
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
55
Un constructor al clasei derivate, mai intai apeleaza constructorul fara parametri al clasei de baza, apoi efectueaza propriile operatii.
Apelul constructorului clasei de baza se face
automat, fara ca programatorul sa scrie ceva.
![Page 56: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/56.jpg)
3. Constructori şi destructori
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
56
In cazul in care acesta doreste sa fie apelat un anumit constructor, altul decat cel fara parametri, se procedeaza ca in exemplul precedent, unde constructorul cu un parametru al clasei derivate apeleaza pe cel cu un parametru al clasei de baza: numar_d (int k) : numar (k) { cout<<”numar_d ”<<k<<endl; }
![Page 57: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/57.jpg)
3. Constructori şi destructori
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
57
In ceea ce priveste destructorii, acestia se apeleaza in ordinea inversa in care au fost apelati constructorii.
![Page 58: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/58.jpg)
3. Constructori şi destructori
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
58
Exemplul 8
#include<iostream.h> class numar{ public: numar() { cout<<"numar \n"; } ~numar() { cout<<"numar destructor\n";
} };
![Page 59: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/59.jpg)
3. Constructori şi destructori
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
59
class numar_d : public numar{ public: numar_d() { cout<<"numar_d \n“; } ~numar_d() { cout<<"numar_d
destructor\n"; } };
![Page 60: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/60.jpg)
3. Constructori şi destructori
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
60
int main(void) { numar_d b; }
![Page 61: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/61.jpg)
3. Constructori şi destructori
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
61
Dupa executia programului se obtin urmatoarele rezultate:
![Page 62: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/62.jpg)
Curs 7
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
62
1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele unei clase
derivate şi obiectele clasei de bază 1.2. Supraîncărcarea funcţiilor 2. Accesul la membrii unei clase derivate
3. Constructori şi destructori în clasele derivate
4. Utilitatea claselor derivate
![Page 63: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/63.jpg)
4. Utilitatea claselor derivate
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
63
Scopul claselor derivate este de a adauga
noi caracteristici unei clase de baza. In general, clasele derivate au nevoie de
constructori mai complecsi decat cei de la baza; de aceea, pentru usurinta, se vor apela implicit constructorii clasei de bază de câte ori este posibil.
![Page 64: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/64.jpg)
4. Utilitatea claselor derivate
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
64
Deoarece o clasă derivată nu este decât o “construcție” în jurul unei clase de bază, regulile sunt următoarele:
1. pentru constructor, se apelează mai întâi constructorii clasei de bază și apoi se execută acțiunile specifice constructorului clasei derivate
2. pentru destructori, se procedează invers, apelându-se întâi destructorul clasei derivate și apoi cel al clasei de bază
![Page 65: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/65.jpg)
4. Utilitatea claselor derivate
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
65
De reținut: Daca toti constructorii sau destructorii unei
clase de baza sunt de tip private, atunci ei nu pot fi accesati de clasa derivata, rezultand o situatie grava, ce va fi semnalata ca eroare de compilare.
Deci, se recomanda ca destructorul si cel putin un constructor al clasei de baza sa fie declarati de tip public.
![Page 66: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/66.jpg)
4. Utilitatea claselor derivate
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
66
Constructorii si destructorii clasei de baza sunt folositi la crearea si distrugerea obiectelor claselor derivate, dar ei nu sunt mosteniti de catre acestea.
![Page 67: Programare orientata pe obiecte - curs...Curs 7 Curs - Programare orientată pe obiecte C++/Java 01.11.2013 3 1. Noţiuni de bază care privesc moştenirea 1.1. Atribuiri între obiectele](https://reader030.fdocuments.net/reader030/viewer/2022040107/5e66135fbfbf3a0a0741d5bd/html5/thumbnails/67.jpg)
01.11.2013 Curs - Programare orientată pe obiecte C++/Java
67
Întrebări?