+ All Categories
Home > Documents > Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe...

Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe...

Date post: 01-Feb-2018
Category:
Upload: phamhanh
View: 226 times
Download: 0 times
Share this document with a friend
54
LECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie şi Mediu
Transcript
Page 1: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

LECTOR DR. 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 orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

Curs 2

Constructori şi destructori

14.10.2013 Programare orientată pe obiecte (C++/Java)

2

Page 3: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

Constructori şi destructori

1. Definiţii 2. Crearea, iniţializarea şi

eliminarea obiectelor 3. Redefinirea funcţiilor membre 4. Operatorul de rezoluţie “::”

14.10.2013 Programare orientată pe obiecte (C++/Java)

3

Page 4: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

1. Definiţii

Pentru crearea, inițializarea, copierea și distrugerea obiectelor, în C++ se folosesc funcții membre speciale, numite constructori și destructori:

Funcția de tip constructor se apelează automat la crearea fiecărui obiect al clasei, creare care poate fi statică sau dinamică (folosind operatorul new).

Funcția de tip destructor se apelează automat la eliminarea unui obiect al clasei, la încheierea timpului de viață sau, în cazul variabilelor dinamice, este solicitat prin program (cu operatorul delete).

14.10.2013 Programare orientată pe obiecte (C++/Java)

4

Page 5: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

1. Definiţii

Aceste tipuri de functii se declara si se definesc asemanator cu celelalte functii membre, dar au cateva particularitati care le diferentiaza de acestea prin:

1. Numele functiilor constructor sau destructor coincide cu numele clasei careia îi apartine; în plus destructorii se diferentiaza prin faptul ca numele lor este precedat de caracterul “~”.

2. În declaratiile si definitiile constructorilor si destructorilor nu se specifica nici un tip de rezultat, nici macar tipul void.

14.10.2013 Programare orientată pe obiecte (C++/Java)

5

Page 6: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

1. Definiţii

3. Constructorii si destructorii nu pot fi mosteniti, dar pot fi apelati de clasa derivata.

4. Nu se pot utiliza pointeri catre constructori sau destructori.

5. Constructorii pot avea parametri, inclusiv parametri impliciti, si pot fi supradefiniti. Destructorii nu au aceste proprietati.

6. Un constructor fara parametri se numeste constructor implicit.

14.10.2013 Programare orientată pe obiecte (C++/Java)

6

Page 7: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

1. Definiţii

7. Daca o clasa nu dispune de constructori si destructori definiti, compilatorul va genera automat un constructor implicit, respectiv un destructor, care sunt si functii publice.

8. De obicei, constructorii si destructorii se declara publici, deoarece, daca s-ar declara privati atunci nu s-ar mai putea declara obiecte de tipul respectiv.

14.10.2013 Programare orientată pe obiecte (C++/Java)

7

Page 8: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

Constructori şi destructori

1. Definiţii 2. Crearea, iniţializarea şi

eliminarea obiectelor 3. Redefinirea funcţiilor membre 4. Operatorul de rezoluţie “::”

14.10.2013 Programare orientată pe obiecte (C++/Java)

8

Page 9: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

2. Crearea, iniţializarea şi eliminarea obiectelor

Prezentăm în continuare un exemplu de clasă care implementează, o structură de tip listă, în mod special - o structură de tip coadă - FIFO (First In First Out).

Obiectele acestei clase sunt structuri de date controlate cu un set de funcţii care asigură următoarele operaţii specifice:

iniţializarea listei adăugarea(introducerea) unui element ştergerea(extragerea) unui element verificarea dacă lista este vidă verificarea dacă lista este plină

14.10.2013 Programare orientată pe obiecte (C++/Java)

9

Page 10: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

2. Crearea, iniţializarea şi eliminarea obiectelor

Astfel, structura de date, împreună cu metodele de operare asociate reprezintă un ansamblu cu o funcţionalitate bine definită.

Clasa conţine câmpurile: tab[100] - un vector definit static care conţine

elementele listei nrcrt - numărul curent(actual) de elemente aflate la

un moment dat în lista prim - un număr care reprezintă poziţia primului

element din lista

14.10.2013 Programare orientată pe obiecte (C++/Java)

10

Page 11: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

2. Crearea, iniţializarea şi eliminarea obiectelor

funcţia init() - introduce o valoare de pornire pentru fiecare din cele două variabile specifice, nrcrt respectiv prim

funcţia adaug() - adaugă un element în listă funcţia extrag() - extrage un element din listă funcţia lista_vida() - returnează 0 dacă lista este

vidă, sau 1 în caz contrar funcţia lista_plina() - returnează 0 daca lista este

plină, sau 1 în caz contrar

14.10.2013 Programare orientată pe obiecte (C++/Java)

11

Page 12: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

2. Crearea, iniţializarea şi eliminarea obiectelor

Constructorul este simplu si poate fi definit inline: #include<iostream.h> class fifo { // declaratii de tip privat

int tab[100]; // vectorul de 100 de elemente

int nrcrt; // numarul curent de elemente din lista

int prim; // primul element din lista

14.10.2013 Programare orientată pe obiecte (C++/Java)

12

Definirea se face in interiorul clasei

Page 13: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

2. Crearea, iniţializarea şi eliminarea obiectelor

public: // declaratii de tip public // functii inline fifo() { nrcrt=prim=0 ; cout<<’’Constructor fifo\n’’; } ~fifo() { cout<<’’Destructor fifo\n’’; }

14.10.2013 Programare orientată pe obiecte (C++/Java)

13

Page 14: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

2. Crearea, iniţializarea şi eliminarea obiectelor

void init() // initializez lista { nrcrt=prim=0; } int lista_vida() // verific daca coada este sau nu vida { return(nrcrt>0); //daca nrcrt=0 atunci lista este vida } int lista_plina() { return(nrcrt<100); //daca nrcrt=100 atunci lista este plina } int adaug(int); //adauga un element la sfarsit int extrag(int&); //extrage un element de la inceput };

14.10.2013 Programare orientată pe obiecte (C++/Java)

14

Page 15: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

2. Crearea, iniţializarea şi eliminarea obiectelor

Pentru vizualizarea apelarii constructorului, s-a adaugat un mesaj.

Clasa nu are nevoie de un destructor,

drept pentru care s-a adaugat unul formal, care nu face nimic dar afiseaza un mesaj, de identificare.

14.10.2013 Programare orientată pe obiecte (C++/Java)

15

Page 16: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

2. Crearea, iniţializarea şi eliminarea obiectelor

Se poate executa urmatorul program care sa contina clasa fifo si care sa aiba doar declaratia unei variabile si functia principala, astfel:

Executia programului va avea ca efect, urmatoarele afisari:

Chiar daca functia main() este vida, conform definitiei unei clase, se obtine un astfel de rezultat.

14.10.2013 Programare orientată pe obiecte (C++/Java)

16

fifo lista; int main()

{}

fifo lista; int main()

{}

Constructor fifo

Destructor fifo

Page 17: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

2. Crearea, iniţializarea şi eliminarea obiectelor

În exemplul următor se reia declaraţia clasei fifo, pentru a obţine liste de dimensiune variabilă, care implicit ar fi egală cu 100 de elemente.

În acest scop, este necesar ca tabloul să

fie alocat dinamic.

14.10.2013 Programare orientată pe obiecte (C++/Java)

17

Page 18: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

2. Crearea, iniţializarea şi eliminarea obiectelor

Se fac următoarele modificări: se elimină funcţia init() si se prevede in schimb un

constructor care preia sarcina alocarii dinamice a tabloului cu dimensiunea specificata si pe cea a initializarii corespunzatoare a listei.

constructorul va fi supradefinit pentru a permite utilizarea unor liste cu un numar implicit de 100 de elemente in tablou.

de asemenea este definit un destructor pentru eliberarea spatiului alocat pentru tablou.

14.10.2013 Programare orientată pe obiecte (C++/Java)

18

Page 19: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

2. Crearea, iniţializarea şi eliminarea obiectelor

Programul va ilustra declararea si functionarea constructorilor si destructorilor si va pune in evidenta momentele in care acestia se apeleaza, prin afisarea unor mesaje la ecran:

14.10.2013 Programare orientată pe obiecte (C++/Java)

19

Page 20: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

2. Crearea, iniţializarea şi eliminarea obiectelor

#include<iostream.h> //lista FIFO cu nmax elemente

class fifo{ // declaratii de tip privat

int nmax; // dimensiunea listei

int *tab; // adresa tabloului listei

int nrcrt; // numarul curent de elemente din lista

int prim; // primul element din lista

14.10.2013 Programare orientată pe obiecte (C++/Java)

20

Page 21: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

2. Crearea, iniţializarea şi eliminarea obiectelor

public: // declaratii de tip public fifo(int); // constructor 1 care creeaza o lista cu un

numar de elemente

fifo(); // constructor 2 care creeaza o lista de 100

de elemente

~fifo(); // destructor

int adaug(int); //adauga un element la sfarsit

int extrag(int&); //extrage un element de la

inceput

14.10.2013 Programare orientată pe obiecte (C++/Java)

21

Page 22: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

2. Crearea, iniţializarea şi eliminarea obiectelor

// functii inline int lista_vida() // verific daca coada este sau nu

vida

{ return(nrcrt>0); //daca nrcrt=0 atunci

lista este vida

} int lista_plina() { return(nrcrt<nmax); //daca nrcrt=nmax

atunci lista este plina

} }; 14.10.2013 Programare orientată pe obiecte (C++/Java)

22

Page 23: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

2. Crearea, iniţializarea şi eliminarea obiectelor

// definitiile functiilor membre ale clasei fifo // constructor 1, lista va avea n elemente

fifo::fifo(int n) { nmax=n; tab=new int; nrcrt=prim=0; cout<<"Constructor 1, lista de

"<<nmax<<"elemente \n"; }

14.10.2013 Programare orientată pe obiecte (C++/Java)

23

Page 24: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

2. Crearea, iniţializarea şi eliminarea obiectelor

//constructor 2, implicit ; lista va avea 100 elemente

fifo::fifo() { nmax=100; tab=new int; nrcrt=prim=0; cout<<"Constructor 2, lista de 100 de

elemente\n"; }

14.10.2013 Programare orientată pe obiecte (C++/Java)

24

Page 25: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

2. Crearea, iniţializarea şi eliminarea obiectelor

//destructor

fifo::~fifo() { cout<<"Destructor, lista de "<<nmax<<"

elemente\n"; delete tab; }

14.10.2013 Programare orientată pe obiecte (C++/Java)

25

Page 26: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

2. Crearea, iniţializarea şi eliminarea obiectelor

int fifo::adaug(int k) //definitia functiei membru este in afara declaratiei clasei resp. si deci,

trebuie specificat ca apartine clasei fifo prin folosirea operatorului de rezolutie ::

{ if(lista_plina()) { tab[(prim+nrcrt)%nmax]=k; nrcrt++; cout<<"Lista are "<<nrcrt<<" elemente\n"; return 1; } else { cout<<"Lista este plina\n"; return 0; } }

14.10.2013 Programare orientată pe obiecte (C++/Java)

26

Page 27: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

2. Crearea, iniţializarea şi eliminarea obiectelor

int fifo::extrag(int &k) { if(lista_vida()) { k=tab[prim]; prim=(prim+1)%nmax; nrcrt--; cout<<"Lista mai are "<<nrcrt<<" elemente\n"; return 1; } else { cout<<"Lista este vida\n"; return 0; } }

14.10.2013 Programare orientată pe obiecte (C++/Java)

27

Page 28: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

2. Crearea, iniţializarea şi eliminarea obiectelor

int main(void) { int k,i; fifo *plista; // declaratia unui pointer la lista

plista=new fifo(20); //creare obiect dinamic

delete plista; }

14.10.2013 Programare orientată pe obiecte (C++/Java)

28

Page 29: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

Constructori şi destructori

1. Definiţii 2. Crearea, iniţializarea şi

eliminarea obiectelor 3. Redefinirea funcţiilor membre 4. Operatorul de rezoluţie “::”

14.10.2013 Programare orientată pe obiecte (C++/Java)

29

Page 30: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

3. Redefinirea funcţiilor membre

Exemplul urmator prezinta o clasa sir care defineste functii membre de comparare a doua siruri, dintre care una din ele va fi rescrisa.

In acest exemplu, singura data de tip private este pointerul la un sir de caractere *text.

Constructorul sir și funcția compar() sunt declarate în cadrul clasei, pe când destructorul ~sir și funcția denumită afiseaza() sunt definite în mod inline.

14.10.2013 Programare orientată pe obiecte (C++/Java)

30

Page 31: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

3. Redefinirea funcţiilor membre

Functia compar() este redefinita. Ea are doua sabloane (prototipuri): Primul sablon este utilizat cand se compara

doua siruri de lungimi diferite, iar al doilea cand se compara numai primele

numarcar caractere ale acestora.

Notatiile sir &sir1 si sir &sir2 reprezinta referintelor celor doua siruri ce trebuie comparate.

14.10.2013 Programare orientată pe obiecte (C++/Java)

31

Page 32: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

3. Redefinirea funcţiilor membre

Functia compar() întoarce un rezultat de tip întreg, astfel încât:

prima definitie a functiei compara doua siruri de lungime diferita,

iar cea de-a doua compara primele numarcar caractere din cele doua siruri.

14.10.2013 Programare orientată pe obiecte (C++/Java)

32

Page 33: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

3. Redefinirea funcţiilor membre

Valoarea compararii cu functiile specializate strcmp() si strncmp() se obtine prin scaderea nedistructiva a caracterelor celor doua functii aflate pe acceasi pozitie relativa.

Se pot obtine urmatoarele valori: Daca s1 < s2 atunci rezultatul este <0 Daca s1 = s2 atunci rezultatul este =0 Daca s1 > s2 atunci rezultatul este >0

14.10.2013 Programare orientată pe obiecte (C++/Java)

33

Page 34: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

3. Redefinirea funcţiilor membre

#include<iostream.h> #include<string.h> #include<stdio.h>

class sir{ // declaratie de tip privat char *text;

14.10.2013 Programare orientată pe obiecte (C++/Java)

34

Page 35: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

3. Redefinirea funcţiilor membre

public: // declaratii de tip public sir(char *sirul); // constructor ~sir(){ delete text; } // destructor int compar(sir &s1, sir &s2); // functia membra

compar va fi redefinita int compar(sir &s1, sir &s2, unsigned int

numarcar); void afiseaza(char *mesaj=" ") { cout<<mesaj<<text<<endl; } };

14.10.2013 Programare orientată pe obiecte (C++/Java)

35

Page 36: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

3. Redefinirea funcţiilor membre

// definirea constructorului sir::sir(char *sirul) { text= new char[strlen(sirul)]; strcpy(text,sirul); } int sir::compar(sir &s1, sir &s2) { return strcmp(s1.text, s2.text); }

14.10.2013 Programare orientată pe obiecte (C++/Java)

36

Page 37: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

3. Redefinirea funcţiilor membre

int sir::compar(sir &s1,sir &s2, unsigned int numarcar) { return strncmp(s1.text, s2.text, numarcar); } int main(void) { sir sir1("abcd"), sir2("abcdef"); sir1.afiseaza("Primul sir este: "); sir2.afiseaza("Al doilea sir este: "); int rezultat1, rezultat2; rezultat1=sir1.compar(sir1,sir2); cout<<"Rezultatul compararii este: "<<rezultat1<<endl; rezultat2 = sir1.compar(sir1,sir2,4); cout<<"Rezultatul compararii este: "<<rezultat2<<endl; }

14.10.2013 Programare orientată pe obiecte (C++/Java)

37

Page 38: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

3. Redefinirea funcţiilor membre

Rezultatul execuţiei este:

14.10.2013 Programare orientată pe obiecte (C++/Java)

38

Page 39: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

Constructori şi destructori

1. Definiţii 2. Crearea, iniţializarea şi

eliminarea obiectelor 3. Redefinirea funcţiilor membre 4. Operatorul de rezoluţie “::”

14.10.2013 Programare orientată pe obiecte (C++/Java)

39

Page 40: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

4. Operatorul de rezoluţie

Definirea funcţiilor dintr-o clasă se face în afara domeniului de definiţie al clasei, și de aceea numele funcţiei trebuie să fie însoţit de numele clasei, şi să fie separat de aceasta prin operatorul de rezoluţie sau vizibilitate ( :: ).

14.10.2013 Programare orientată pe obiecte (C++/Java)

40

Page 41: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

4. Operatorul de rezoluţie

Exemplu de implementare a unei clase: Definiţi şi implementaţi clasa

Cilindru, având ca date membru: Raza şi Inaltimea cilindrului şi ca funcţii membre: un constructor Aria Volum

14.10.2013 Programare orientată pe obiecte (C++/Java)

41

Page 42: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

4. Operatorul de rezoluţie

#include<iostream.h> #define PI 3.14 class cilindru { float raza; float inaltimea;

14.10.2013 Programare orientată pe obiecte (C++/Java)

42

Page 43: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

4. Operatorul de rezoluţie

public: cilindru(); float aria(); float aria_totala(); float volum(); };

14.10.2013 Programare orientată pe obiecte (C++/Java)

43

Page 44: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

4. Operatorul de rezoluţie

cilindru::cilindru() { cout<<"Dati raza cilindrului = "; cin>>raza; cout<<"Dati inaltimea cilindrului = ";

cin>>inaltimea; } float cilindru::aria() { return ( 2 * PI * raza * inaltimea ); }

14.10.2013 Programare orientată pe obiecte (C++/Java)

44

Page 45: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

4. Operatorul de rezoluţie

float cilindru::aria_totala() { float a; a = aria(); return( a + 2 * PI * raza * raza ); } float cilindru::volum() { return ( PI * raza * raza * inaltimea ); }

14.10.2013 Programare orientată pe obiecte (C++/Java)

45

Page 46: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

4. Operatorul de rezoluţie

int main(void) { cilindru c; cout<<"Aria cilindrului este = "<<c.aria()<<endl; cout<<"Aria totala este =

"<<c.aria_totala()<<endl; cout<<"Volumul cilindrului este =

"<<c.volum()<<endl; }

14.10.2013 Programare orientată pe obiecte (C++/Java)

46

Page 47: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

Probleme propuse spre rezolvare

1. Definiţi şi implementaţi clasa Cerc, având ca dată

membră Raza, un constructor şi ca funcţii membre Aria şi Circumferinta.

2. Definiţi şi implementaţi clasa Dreptunghi, având

ca date membre Latime şi Lungime şi ca funcţii membre: un constructor, Perimetru şi Aria.

14.10.2013 Programare orientată pe obiecte (C++/Java)

47

Page 48: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

Solutie problema 1: #include<iostream.h> #define PI 3.14 class cerc{ float raza; public: cerc(); float aria(); float circumferinta(); };

14.10.2013 Programare orientată pe obiecte (C++/Java)

48

Page 49: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

cerc::cerc() { cout<<"Raza cercului este = "; cin>>raza; } float cerc::aria() { return (PI*raza*raza); } float cerc::circumferinta() { return (2*PI*raza); }

14.10.2013 Programare orientată pe obiecte (C++/Java)

49

Page 50: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

int main(void) { cerc c; cout<<"Aria cercului este = "<< c.aria()

<<endl; cout<<"Circumferinta cercului este = "<<

c.circumferinta() <<endl; }

14.10.2013 Programare orientată pe obiecte (C++/Java)

50

Page 51: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

Solutie problema 2: #include<iostream.h> class dreptunghi{ float latime; float lungime; public: dreptunghi(); float perimetru(); float aria (); };

14.10.2013 Programare orientată pe obiecte (C++/Java)

51

Page 52: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

dreptunghi:: dreptunghi() { cout<<"Dati latimea dreptunghilui = ";

cin>>latime; cout<<"Dati lungimea dreptunghilui = ";

cin>>lungime; } float dreptunghi::perimetru() { return (2*(latime+lungime)); }

14.10.2013 Programare orientată pe obiecte (C++/Java)

52

Page 53: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

float dreptunghi::aria() { return(latime*lungime); } int main(void) { dreptunghi d; cout<<“Perimetru dreptunghilui este = „

<< d.perimetru()<<endl; cout<<"Aria este = "<< d.aria()<<endl; }

14.10.2013 Programare orientată pe obiecte (C++/Java)

53

Page 54: Programare orientată pe - · PDF fileLECTOR DR. ADRIAN RUNCEANU Programare orientată pe obiecte Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul

Întrebări?

14.10.2013 Programare orientată pe obiecte (C++/Java)

54


Recommended