Programare Orientata Obiect in C++

download Programare Orientata Obiect in C++

of 61

  • date post

    01-Dec-2015
  • Category

    Documents

  • view

    160
  • download

    12

Embed Size (px)

description

Programare Orientata Obiect in C++

Transcript of Programare Orientata Obiect in C++

  • Universitatea Politehnica din Timioara Facultatea de Automatic i Calculatoare

    Dorin Berian Adrian Coco

    PROGRAMARE ORIENTAT PE OBIECTE

    ndrumtor de laborator

  • Cuvnt nainte Acest ndrumtor se adreseaz studenilor din anul II Ingineria Sistemelor i anul II Informatic (Facultatea de Automatic i Calculatoare de la Universitatea Politehnica din Timioara) la disciplina Programare Orientat pe Obiecte. Materialul cuprinde 9 lucrri de laborator care cuprind att parte teoretic ct i parte aplicativ cu scopul deprinderii stilului de programare specific limbajelor de programare orientate pe obiecte, n particular limbajul C++.

    Dorin Berian

  • Cuprins

    Laboratorul 1: Completri aduse de limbajul C++ fa de limbajul C 7

    Laboratorul 2: ncapsularea prin intermediul claselor . 13

    Laboratorul 3: Pointeri la metode. Funcii inline. Membri statici ... 17

    Laboratorul 4: Constructori i destructori ... 23

    Laboratorul 5: Funcii i clase prietene ... 29

    Laboratorul 6: Motenirea (derivarea) claselor ... 33

    Laboratorul 7: Metode virtuale. Utilizarea listelor eterogene ..................................... 41

    Laboratorul 8: Motenire multipl ... 49

    Laboratorul 9: abloane n C++ .. 55

    Bibliografie .......... 61

  • Laborator 1 POO:

    Completri aduse de limbajul C++ fa de limbajul C

    Obiectivul laboratorului: Formarea unei imagini generale, preliminare, despre programarea orientat pe obiecte (POO) i deprinderea cu noile facilitai oferite de limbajul C++.

    Beneficiul: Completrile aduse limbajului C vin n sprijinul programatorului i i ofer acestuia noi instrumente de lucru, permindu-i s realizeze programe mult mai compacte, ntr-un mod avantajos din mai multe puncte de vedere: modularizare, fiabilitate, reutilizarea codului etc. De exemplu, suprancrcarea funciilor permite reutilizarea numelui funciei i pentru alte funcii, mrind astfel lizibilitatea programului.

    Cuprins: Laboratorul trata aspecte referitoare la: - intrri i ieiri;- suprancrcarea funciilor;- alocarea dinamic a memoriei (operatorii new i delete);- parametrii cu valori implicite;- transferul prin referin;

    1. Conceptele POO

    Principalele concepte (caracteristici) ale POO sunt:

    ncapsularea contopirea datelor cu codul (metode de prelucrare si acces la date) n clase, ducnd la o localizare mai bun a erorilor i la modularizarea problemei de rezolvat;

    motenirea - posibilitatea de a extinde o clasa prin adaugarea de noi functionalitati polimorfismul ntr-o ierarhie de clase obtinuta prin mostenire, o metod poate avea

    implementari diferite la nivele diferite in acea ierarhie;

    2. Intrri i ieiri

    Limbajul C++ furnizeaz obiectele cin i cout, n plus fa de funciile scanf i printf din limbajul C. Pe lng alte avantaje, obiectele cin i cout nu necesit specificarea formatelor.

    Exemplu:

    cin >> variabila;cout

  • int a;float b;char c[20];cout
  • 4. Operatorii new i delete

    Limbajul C++ introduce doi noi operatori pentru alocarea dinamic de memorie, care nlocuiesc familiile de funcii "free" i "malloc" i derivatele acestora.

    Astfel, pentru alocarea dinamic de memorie se folosete operatorul new, iar pentru eliberarea memoriei se folosete operatorul delete.

    Operatorul "new" returneaz un pointer la zona de memorie alocat dinamic (dac alocarea se face cu succes) i NULL dac alocarea de memorie nu se poate efectua.

    Operatorul "delete" elibereaz zona de memorie la care pointeaz argumentul su.

    Exemplu:

    struct sistem {

    char nume[20];float disc;int memorie;int consum;

    };struct sistem *x;void main(void){

    x = new sistem;x->disc = 850;x->memorie = 16;x->consum = 80;delete x;

    }

    Programul prezentat definete un pointer la o structur de tip sistem i aloc memorie pentru el, folosind operatorul new. Dezalocarea memoriei se face folosind operatorul delete.

    Dac se dorete alocarea de memorie pentru un tablou de elemente, numrul elementelor se va trece dup tipul elementului pentru care se face alocarea.

    Exemplu:

    x = new sistem[20]; - aloc memorie pentru 20 de elemente de tip sistem;delete[] x; - eliberarea memoriei

    5. Transferul prin referin

    O referin este un alt nume al unui obiect (variabila).

    Pentru a putea fi folosit, o referin trebuie iniializat in momentul declararii, devenind un alias (un alt nume) al obiectului cu care a fost iniializat.

    Folosind transferul prin referin, n funcii nu se va mai transmite ntreaga structur, ci doar adresa ei. Membrii structurii pot fi referii folosind . sau -> pentru pointeri. n cazul utilizrii referinelor, se lucreaz direct asupra obiectului referit.

    9

  • Considernd un obiect x, prin "&x" se nelege referin la obiectul x.

    Exemplu:

    void ex (int i) void ex (int &i){ {

    i = 7; i = 7;} }int n = 3; int n = 3;ex (n); ex (n);cout i;int j = 5*i-1; //declaratie i initializare de valoarecout

  • Limbajul C++ introduce operatorul de rezoluie (::), care permite accesul la un obiect (sau variabil) dintr-un bloc n care acesta nu este vizibil, datorit unei alte declaraii.

    Exemplu: (rulai urmtoarea secven de program)

    char s[20]= "variabila globala";void afiseaza(void){

    char s[20] = variabila locala;cout

  • void main(void){

    funcie(456, 4.5, 1.4, "apel 1"); funcie(456, 4.5, 1.4);

    funcie(456, 4.5); funcie(456.5);

    }

    Aplicaia 3

    S se realizeze un program care calculeaz produsul a dou numere reale i a dou numere complexe, specificate prin parte reala i parte imaginar. Funciile de calcul al produselor vor avea acelai nume i parametri diferii.

    ntrebri:

    1. Ce este ncapsularea?2. Ce este motenirea?3. Ce este polimorfismul?4. Care sunt funciile de intrare/ieire n C++?5. Unde trebuiesc plasate argumentele cu valori implicite?6. Ce nseamn suprancarcarea funciilor n Limbajul C++?7. Care sunt operatorii de alocare i dezalocare de memorie n limbajul C++?8. Ce este o referin ?9. Referina este un pointer?10. Ce este operatorul de rezoluie?11. Unde se pot plas declaraiile de variabile n cadrul Limbajului C++?

    12

  • Laborator 2 POO:

    ncapsularea prin intermediul claselor

    Scopul laboratorului: Prezentarea noiunilor de clas i obiect.

    Beneficiul: Clasele i obiectele folosite n POO i permit programatorului s realizeze programe mai compacte dect cele scrise n limbajele neobiectuale. De asemenea, pri din program pot fi mai uor reutilizate i noul program poate fi mai uor depanat.

    Scurt prezentare: Acest laborator prezint noiunile de clas i obiect, precum i aspecte referitoare la:

    - definirea unei clase;- variabile i funcii membre;- declararea obiectelor;

    1. ncapsularea ca principiu al POO

    n C++ ncapsularea este ndeplinit prin dou aspecte:

    1. folosirea claselor pentru unirea structurile de date i a funciilor destinate manipulrii lor;2. folosirea seciunilor private i publice, care fac posibil separarea mecanismului intern de

    interfaa clasei;

    O clas reprezint un tip de date definit de utilizator, care se comport ntocmai ca un tip predefinit de date. Pe lng variabilele folosite pentru descrierea datelor, se descriu i metodele (funciile) folosite pentru manipularea lor.

    Instana unei clase reprezint un obiect - este o variabil declarat ca fiind de tipul clasei definite.

    Variabilele declarate n cadrul unei clase se numesc variabile membru, iar funciile declarate n cadrul unei clase se numesc metode sau functii membru. Metodele pot accesa toate variabilele declarate n cadrul clasei, private sau publice.

    Membrii unei clase reprezint totalitatea metodelor i a variabilelor membre ale clasei.

    Sintaxa declarrii unei clase este urmtoarea:

    specificator_clasa Nume_clasa{ [ [ private : ] lista_membri_1]

    [ [ public : ] lista_membri_2]};

    Specificatorul de clas specificator_clasa poate fi: - class;- struct;- union;

    13

  • Numele clasei (Nume_clasa) poate fi orice nume, n afara cuvintelor rezervate limbajului C++. Se recomand folosirea de nume ct mai sugestive pentru clasele folosite, precum i ca denumirea claselor s nceap cu liter mare. (ex: class Elevi)

    Folosind specificatorii de clas struct sau union se descriu structuri de date care au aceleai proprieti ca i n limbajul C (neobiectual), cu cteva modificri :

    se pot ataa funcii membru; pot fi compuse din trei seciuni - privat, public i protejat (folosind specificatorii de acces

    private, public i protected);

    Diferena principal ntre specificatorii class, struct i union este urmtoarea: pentru o clas declarat folosind specificatorul class, datele membre sunt considerate implicit de tip private, pn la prima folosire a unuia din specificatorii de acces public sau protected. Pentru o clas declarat folosind specificatorul struct sau union, datele membre sunt implicit de tip public, pn la prima folosire a unuia din specificatorii private sau protected. Specificatorul protected se folosete doar dac este folosit motenirea.

    Descrierea propriu-zis a clasei const din cele doua liste de membrii, prefixate de cuvintele cheie private i/sau public.

    Membrii aparinnd seciunii public pot fi accesai din orice punct al domeniului de existen al respectivei clase, iar cei care aparin seciunii private (att date ct i funcii) nu pot fi accesai dect de ctre metodele clasei respective. Utilizatorul clasei nu va avea acces la ei dect prin intermediul metodelor declarate n seciunea public (metodelor publice).

    Definirea metodelor care aparin unei clase se face prefixnd numele metodei cu numele clase