+ All Categories
Home > Documents > Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf ·...

Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf ·...

Date post: 12-Oct-2020
Category:
Upload: others
View: 2 times
Download: 0 times
Share this document with a friend
52
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ă perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

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ă perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

Curs 2

Constructori şi destructori

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

2

Page 3: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

Constructori şi destructori

1. Definiţii

2. Crearea, iniţializarea şi eliminarea obiectelor

3. Redefinirea funcţiilor membre

4. Operatorul de rezoluţie “::”

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

3

Page 4: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

1. Definiţii

Pentru crearea, initializarea, copierea si distrugerea obiectelor, in C++ se folosesc functii membre speciale, numite constructori si destructori:

Functia de tip constructor se apeleaza automat la

crearea fiecarui obiect al clasei, creare care poate fi statica sau dinamica (folosind operatorul new).

Functia de tip destructor se apeleaza automat la eliminarea unui obiect al clasei, la incheierea timpului de viata sau, in cazul variabilelor dinamice, este solicitat prin program (cu operatorul delete).

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

4

Page 5: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

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.

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

5

Page 6: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

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.

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

6

Page 7: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

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.

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

7

Page 8: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

Constructori şi destructori

1. Definiţii

2. Crearea, iniţializarea şi eliminarea obiectelor

3. Redefinirea funcţiilor membre

4. Operatorul de rezoluţie “::”

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

8

Page 9: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

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ă

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

9

Page 10: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

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 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

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

10

Page 11: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

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

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

11

Page 12: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

2. Crearea, iniţializarea şi eliminarea obiectelor

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

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

12

Page 13: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

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 };

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

13

Page 14: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

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.

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

14

Page 15: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

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.

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

15

fifo lista; int main()

{}

Constructor fifo

Destructor fifo

Page 16: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

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.

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

16

Page 17: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

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.

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

17

Page 18: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

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:

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

18

Page 19: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

2. Crearea, iniţializarea şi eliminarea obiectelor

#include<iostream.h> //lista FIFO cu nmax numere de 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

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

19

Page 20: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

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 // 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 } };

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

20

Page 21: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

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 "<<endl; }

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

21

Page 22: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

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"<<endl;

}

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

22

Page 23: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

2. Crearea, iniţializarea şi eliminarea obiectelor

//destructor

fifo::~fifo()

{

cout<<"Destructor, lista de "<<nmax<<" elemente"<<endl;

delete tab;

}

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

23

Page 24: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

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"<<endl; return 1; } else { cout<<"Lista este plina"<<endl; return 0; } }

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

24

Page 25: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

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"<<endl; return 1; } else { cout<<"Lista este vida"<<endl; return 0; } }

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

25

Page 26: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

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;

}

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

26

Page 27: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

Constructori şi destructori

1. Definiţii

2. Crearea, iniţializarea şi eliminarea obiectelor

3. Redefinirea funcţiilor membre

4. Operatorul de rezoluţie “::”

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

27

Page 28: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

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 si functia compar() sunt numai declarate in cadrul clasei, pe cand destructorul ~sir si functia denumita afiseaza() sunt definite in mod inline.

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

28

Page 29: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

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.

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

29

Page 30: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

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.

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

30

Page 31: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

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

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

31

Page 32: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

3. Redefinirea funcţiilor membre

#include<iostream.h>

#include<string.h>

#include<stdio.h>

class sir{

// declaratie de tip privat

char *text;

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

32

Page 33: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

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; } };

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

33

Page 34: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

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); }

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

34

Page 35: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

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; }

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

35

Page 36: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

3. Redefinirea funcţiilor membre

Rezultatul execuţiei este:

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

36

Page 37: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

Constructori şi destructori

1. Definiţii

2. Crearea, iniţializarea şi eliminarea obiectelor

3. Redefinirea funcţiilor membre

4. Operatorul de rezoluţie “::”

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

37

Page 38: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

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 ( :: ).

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

38

Page 39: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

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

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

39

Page 40: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

4. Operatorul de rezoluţie

#include<iostream.h>

#define PI 3.14

class cilindru

{

float raza;

float inaltimea;

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

40

Page 41: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

4. Operatorul de rezoluţie

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

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

41

Page 42: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

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 ); }

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

42

Page 43: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

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 ); }

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

43

Page 44: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

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; }

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

44

Page 45: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

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.

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

45

Page 46: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

Solutie problema 1:

#include<iostream.h>

#define PI 3.14

class cerc{

float raza;

public:

cerc();

float aria();

float circumferinta();

};

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

46

Page 47: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

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

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

47

Page 48: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

int main(void)

{

cerc c;

cout<<"Aria cercului este = "<< c.aria() <<endl;

cout<<"Circumferinta cercului este = "<< c.circumferinta() <<endl;

}

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

48

Page 49: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

Solutie problema 2:

#include<iostream.h>

class dreptunghi{

float latime;

float lungime;

public:

dreptunghi();

float perimetru();

float aria ();

};

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

49

Page 50: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

dreptunghi:: dreptunghi()

{

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

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

}

float dreptunghi::perimetru()

{

return (2*(latime+lungime));

}

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

50

Page 51: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

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

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

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

51

Page 52: Programare orientată perunceanu.utgjiu.ro/.../fetch.php?media=docs:cursuri:curs2-poo_2012_.pdf · Constructori şi destructori 1. Definiţii 2. Crearea, iniţializarea şi eliminarea

Întrebări?

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

52


Recommended