1

Documente similare
Microsoft PowerPoint - ImplementareLimbaj [Read-Only] [Compatibility Mode]

Top

Object Oriented Programming

-

Slide 1

Slide 1

Laborator 2 Incompatibilităţi/Diferenţe între C şi C++ Completări C++ Supraîncărcarea (redefinirea) numelui de funcţii În C nu este permisă existenţa

Microsoft Word - CarteC.doc

L7

/*

PROGRAMARE ORIENTATA PE OBIECTE

1 Lucrarea nr. 8 - Structuri de date de tip liste sortate O listă sortată reprezintă un aranjament al înregistrărilor din cadrul listei în funcţie de

Microsoft Word - PCLP2_Curs_4_2019.doc

Programarea şi utilizarea calculatoarelor

SUBPROGRAME

Microsoft PowerPoint - Curs_SDA_10_RO_2019_v1.pptx

Microsoft PowerPoint - Curs_SDA_9_RO_2019_v2.pptx

Programarea şi utilizarea calculatoarelor

Laborator 4: Continuare Programare Orientată pe Obiecte Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 29 octombrie 2011

Tablouri unidimensionale Problema 1 Să se determine mulţimea cifrelor unui număr natural n > 0, dat. Exemplu: n= Cifre = {1,2,3,7} Se cere să s

Procesarea Imaginilor - Laborator 1: Introducere în utilizarea bibliotecii OpenCV 1 1. Introducere în utilizarea bibliotecii OpenCV 1.1. Introducere S

Algoritmi elementari Metode de căutare secvenţială binară Metode de ordonare metoda bulelor metoda inserţiei metoda selecţiei metoda numărării Intercl

Microsoft Word - Raspunsul la niste provocari. Partea III..doc

Lucrarea nr. 4 - Algoritmi de sortare şi ordonare Breviar teoretic Un algoritm de sortare este o metoda prin care se aranjează elementele unui tablou

Laborator 2: Instrucţiuni Java şi lucru cu şiruri de caractere Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 18 octombrie 2011

Microsoft PowerPoint - Curs_SDA_3_RO_2019_v2.pptx

Propunator: Morar Florin Colegiul National Silvania Zalau Discipina: Informatica Nivel liceal, cls. XII 1.Să se scrie în limbajul C/C++ definiţia comp

Slide 1

Microsoft Word _POO_Lab_1_Modificari_v01.htm

Limbaje de Programare Curs 5 – Siruri de caractere

Declararea variabilelor

PROGRAMARE OBIECT-ORIENTATA LABORATOR 1 INTRODUCERE IN CLASE SI OBIECTE Introducere teoretica Prin intermediul unei Clase ne dorim sa construim tipuri

Microsoft PowerPoint - Curs_SDA_4_RO_2019_v2.pptx

C++ Probleme

-

Propunator: Morar Florin Colegiul National Silvania Zalau Discipina: Informatica Nivel liceal, cls. XI 1.Fişierul text bac.in conţine cel mult 1000 de

Slide 1

Ingineria Sistemelor de Programare

Curs 6 Gestiunea memoriei in C++ Alocare dinamica. Destructor. RAII. Rule of three. Tratarea excepțiilor exception safe code Moștenire Curs 5 Template

Programarea şi utilizarea calculatoarelor

Limbaje de programare Pointeri. Alocare dinamică (continuare) 26 noiembrie 2012

Structuri de date pentru partiţii de mulţimi O partiţie finită a unei mulţimi nevide S este o mulţime finită de submulţimi ale lui S: {S 1, S 2,..., S

Diapositive 1

Laborator 3

Metode de programare Proiectarea algoritmilor

Manual de Informatică pentru licenţă iulie și septembrie 2018 Specializarea Informatică Tematica generală: Partea 1. Algoritmică şi programare 1. Căut

ALGORITMII ŞI REPREZENTAREA LOR Noţiunea de algoritm Noţiunea de algoritm este foarte veche. Ea a fost introdusă în secolele VIII-IX de către Abu Ja f

E_d_Informatica_sp_MI_2015_bar_02_LRO

Limbaje de Programare Curs 6 – Functii de intrare-iesire

Subiectul 1

ALGORITMICĂ. Seminar 3: Analiza eficienţei algoritmilor - estimarea timpului de execuţie şi notaţii asimptotice. Problema 1 (L) Să se determine număru

Limbaje de programare. Laborator Clasa, obiect, abstractizare Clasa : descrie tipul obiectelor dintr-un program; poate fi asociată cu un şablon

Laborator 9: Fire de execuţie Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 20 noiembrie 2011

Paradigme de Programare

Microsoft Word - O problema cu bits.doc

Algoritmi genetici paraleli. Implementari Java. Continut laborator: 1. Obiectivul lucrarii. 2. Notiuni teoretice: 3. Cerinte laborator. 4. Tema. 1. Ob

Slide 1

Operatorii in C Expresii Operatori aritmetici Operatori de asignare Operatori de incrementare si decrementare Operatori relationali Operatori logici O

/*

LUCRAREA NR

E_d_Informatica_sp_SN_2014_bar_10_LRO

Facultatea de Automatică și Calculatoare

Ecuatii si sisteme de ecuatii neliniare 1 Metoda lui Newton Algorithm 1 Metoda lui Newton pentru ecuaţia f(x) = 0. Date de intrare: - Funcţia f - Apro

PHP (II)

PCLPII-C16(9)

Curs 8: Tehnica divizării (I) Algoritmi si structuri de date - Curs 8 1

Grile si probleme siruri de caractere in C++ ŞIRURI DE CARACTERE Itemii următori sunt preluaţi din variantele de bacalaureat În secvenţa de i

SIRURI DE CARACTERE in C++ O constanta de tip sir de caractere de declara intre doua caractere. In memoria interna, o constanta de acest tip este reti

Slide 1

Metode de sortare - pregătire admitere - Conf.dr. Alexandru Popa Lect. dr. Andrei Pătraşcu Universitatea din Bucureşti 1

Facultatea de Matematica si Informatica Universitatea din Bucuresti Structuri liniare Liste. Stive. Cozi - Inserare, cautare, stergere - Lectii de pre

Backtracking_2018

Lecţia 2 Structura liniară, alternativă şi repetitivă Clasa a V-a Structuri de bază(liniară, alternativă şi repetitivă) Programarea structurată este o

Laborator 2 - Încapsularea Programare Orientată pe Obiecte Tema 2.1 Să se analizeze programul EX2.C Indicatii 2.1 A nu se uita de fisierul EX2.H Tema

Paradigme de programare

Microsoft Word - lab4.doc

Lecții de pregă,re la informa,că Admitere 2019 Tema: Discutarea problemelor date la ul,mele sesiuni de admitere Bogdan Alexe

Microsoft Word - CarteC.doc

Microsoft Word - Software pentru ordonarea multirang a componentelor unei colectivitati.doc

Limbaje de Programare Curs 8 – Fisiere

Microsoft Word - CarteC.doc

Curs 3 Permutari cu repetitie. Combinari. Algoritmi de ordonare si generare

Analiză statică Analiza fluxului de date 23 octombrie 2014

-

Cursul 1 1. Introducere Corpul numerelor complexe Dezvoltarea istorică a gândirii matematice a urmărit îndeaproape evoluţia ideii de număr. Această ev

Microsoft Word - c6.doc

Declaraţii. Instrucţiuni 19 octombrie 2005 Programarea calculatoarelor 2. Curs 3b Marius Minea

Scrieţi pe foaia de examen răspunsul pentru fiecare dintre cerinţele următoare

Slide 1

1. Operatii cu matrici 1 Cerinte: Sa se realizeze functii pentru operatii cu matrici patratice (de dimensiune maxima 10x10). Operatiile cerute sunt: A

Lucrarea 7 Filtrarea imaginilor BREVIAR TEORETIC Filtrarea imaginilor se înscrie în clasa operaţiilor de îmbunătăţire, principalul scop al acesteia fi

Tablouri (continuare)

MINISTERUL EDUCAŢIEI, CULTURII ŞI CERCETĂRII AL REPUBLICII MOLDOVA UNIVERSITATEA DE STAT ALECU RUSSO DIN BĂLŢI FACULTATEA DE ŞTIINŢE REALE, ECONOMICE

proiectarea bazelor de date

D.Rusu, Teoria măsurii şi integrala Lebesgue 6 MĂSURA LEBESGUE Cursul 5 Teorema 6.26 Există submulţimi ale lui R care nu sunt măsurabile Lebesgue. Dem

Matrici și vectori în VBA În VBA, o matrice este un grup de variabile de același tip. De ce ar trebui să utilizați o matrice? Presupunem că ați vrut s

Interfețe și Protocoale de Comunicații Arduino-Port Paralel Arduino. Laborator 1- Portul Paralel 1 Caracteristici generale Arduino UNO este o placă de

CURS

Capitole Speciale de Informatică Curs 1: Extragerea informaţiilor. Modelul boolean şi modelul boolean extins 27 septembrie 2018 Extragerea informaţiil

Transcriere:

Laborator 3 Supraîncărcarea operatorilor (părțile II și III) 1. Supraîncărcarea operatorilor (părțile II și III) Exemplu 1: Consideram clasa sir, in care fiecare obiect retine adresa unui sir de caractere. Astfel, data membru adr retine adresa unui pointer care sir, iar sirul va fi alocat cu operatorul new intr-o zona de memorie disponibila. Clasa va avea un constructor care aloca spatiu de memorie pentru sirul de caractere, un destructor care elibereaza zona de memorie alocata unui sir de caractere, o metoda afis() folosita pentru afisarea sirului si o metoda de copiere realizata prin supraincarcarea operatorului =. Aceasta metoda are rolul ca la o atribuire a = b, unde a si b sunt obiecte de tip sir: - sa elibereze memoria retinuta de sirul de caractere a carui adresa o contine data membru adr a lui a; - sa aloce spatiu pentru sirul retinut de b - sa copieze sirul retinut de b in acest spatiu de memorie Dupa aceasta operatie, sirul care era initial retinut numai b este alocat in doua locuri diferite in memoria disponibila, iar pointerii catre cele doua locuri sunt retinuti de datele membru ale obiectelor a si b. #include<iostream.h> #include<conio.h> #include<string.h> class sir char *adr; public: sir(char s[]); ~sir(); void afis(); void operator=(sir& sirul); sir::sir(char s[]) cout<<"constructor"<<endl; adr = new char[strlen(s) + 1]; strcpy(adr,s); sir::~sir() cout<<"destructor"<<endl; delete [] adr; adr = 0; 1

void sir::afis() cout<<adr<<endl; void sir::operator=(sir& sirul) cout<<"operator = "<<endl; delete[] adr; adr = new char[strlen(sirul.adr) + 1]; strcpy(adr, sirul.adr); int main(void) sir s("un sir"), t("alt sir"); s.afis(); t.afis(); s = t; t.~sir(); s.afis(); cout<<"sf. program"<<endl; Dupa executia programului se va afisa: 2

Exemplu 2: Urmatorul exemplu foloseste operatorul () pentru parcurgerea unei liste simple. #include<iostream.h> #include<stdlib.h> struct elem int inf; elem *adr; // se initializeaza camp inf cu n elem(int n, struct elem *p): inf(n),adr(p) class list elem *prim,*p; public: // functie de afisare element curent void afispoz() cout<<"elementul de pe pozitia curenta are valoarea "<<p->inf<<endl; //primul element va avea adresa absoluta zero list(void) prim=null; //crearea listei care va avea un numar dat de elemente list(int); // supraincarcarea operatorului realizeaza pozitionarea la nodul urmator; // Daca pozitia curenta este la sfarsitul listei, atunci nodul urmator va fi primul element al listei elem *operator() (); // supraincarcarea operatorului determina avansarea nodului curent cu un numar dat de pozitii elem *operator() (int); list::list(int nr) int inf; if(nr<=0) cout<<"eroare la initializarea listei!";exit(1); cout<<endl<<"introduceti "<<nr<<" valori ";cin>>inf; prim=new elem(inf,null); elem*q=prim; for(int i=1;i<nr;i++) cin>>inf; p=new elem(inf,null); q->adr=p; q=p; p=prim; elem *list::operator() () elem *poz=p; poz=p->adr? p->adr : prim; return p=poz; elem *list::operator() (int nr) 3

for(int i=1;i<nr;i++) (*this) (); return (*this)(); int main() list l(6); l(); l.afispoz(); l(2); l.afispoz(); // se pozitioneaza cu nr-1 pozitii // valoarea returnata este data de ultima pozitionare Dupa executia programului se va afisa: 4

Exemplu 3: Folosind clasa complex (care gestioneaza numere complexe), putem supraincarca operatorul ++ pentru a incrementa partea reala a unui numar complex. #include<iostream.h> #define PI 3.14159265358979 class complex // date membru protejate(private) double real; double imag; // functii membru neprotejate public: // constructor folosit la initializare complex(double x=0,double y=0); // constructor de copiere complex(const complex &); //supraincarcarea operatorului ++ prefixata complex operator++(); //supraincaracarea operatorului ++ postfixata complex operator++(int); // afiseaza numarul complex void afiscomplex(); complex::complex(double x, double y) real=x; imag=y; complex::complex(const complex &z) real=z.real; imag=z.imag; complex complex::operator++() real++; return *this; complex complex::operator++(int) real++; return *this; void complex::afiscomplex() cout<<real<<" + i * "<<imag<<endl; int main(void) complex z(2,1), z1, z2; cout<<"z initial = "; z.afiscomplex(); 5

z1 = ++z; z2 = z++; cout<<"z1 = ";z1.afiscomplex(); cout<<"z2 = ";z2.afiscomplex(); cout<<"z final = "; z.afiscomplex(); Dupa executia programului se obtin urmatoarele rezultate: Exemplu 4: Clasa vector folosita pentru operatii cu vectori de numere intregi. #include<iostream.h> class vector private: int *a; //vectorul va avea un numar variabil de componente si deci spatiul necesar il vom aloca in heap int n; public: vector(); // constructor implicit vector(int *a, int n1); // constructor ~vector(); //destructor int min(); void afisare(); // determina cel mai mic element din vector //afisarea elem. unui vector friend int egali(vector &v1, vector &v2); // testeaza egalitatea a doi vectori int operator<(vector &v); void ord_cresc(); // compararea a doi vectori // ordonarea crescatoare a elem. unui vector // interclasarea a doi vectori friend void inter(vector &v1, vector &v2, vector &v3); vector::vector(int *a1, int n1) n=n1; a=new int[n]; 6

for(int i=0;i<n;i++) a[i]=a1[i]; vector::~vector() cout<<"se elibereaza "<<n*sizeof(int)<<" octeti"<<endl; delete[] a; int vector::min() int m; m=a[0]; for(int i=1;i<n;i++) if(a[i] < m) m=a[i]; return m; void vector::afisare() for(int i=0;i<n;i++) cout<<a[i]<<" "; cout<<endl; int egali(vector &v1, vector &v2) if(v1.n!=v2.n) return 0; for(int i=0;i<v1.n;i++) if(v1.a[i]!=v2.a[i]) return 0; return 1; int vector::operator<(vector &v) int k; if(n < v.n) k=n; else k=v.n; for(int j=0;j<k;j++) if(a[j]>v.a[j]) return 0; else if(a[j]<v.a[j]) return 1; if(n < v.n) return 1; else return 0; void vector::ord_cresc() //ordonarea elem. unui vector fol. metoda bubblesort int i,j,aux,k; do k=1; for(i=0;i<=n-1;i++) if(a[i]>a[i+1]) aux=a[i]; a[i]=a[i+1]; a[i+1]=aux; 7

while(k==0); k=0; void inter(vector &v1, vector &v2, vector &v3) int i=0,j=0,k=0,l; while( (i<=v1.n) && (j<=v2.n) ) if(v1.a[i]<v2.a[j]) v3.a[k]=v1.a[i]; i++;k++; else v3.a[k]=v2.a[j]; j++;k++; if(i<=v1.n) for(l=i;l<v1.n;l++) v3.a[l++]=v1.a[l]; else for(l=j;l<v2.n;l++) v3.a[l++]=v2.a[l]; int main(void) int x[]=7,6,3,3,1 int y[]=6,55,44,3,2,10 vector v1(x,5), v2(y,6); cout<<"vectorul v1 = ";v1.afisare(); cout<<"vectorul v2 = ";v2.afisare(); cout<<"minimul din v1 este egal cu "<<v1.min()<<endl; cout<<"minimul din v2 este egal cu "<<v2.min()<<endl; if(egali(v1,v2)) cout<<"v1 si v2 sunt egali"<<endl; else cout<<"v1 si v2 sunt diferiti"<<endl; if(v1 < v2) cout<<"v1 < v2"<<endl; else cout<<"v1 nu este mai mic decat v2"<<endl; cout<<endl; cout<<"vectorul v1 ordonat crescator : "; v1.ord_cresc();v1.afisare(); cout<<"vectorul v2 ordonat crescator : "; v2.ord_cresc();v2.afisare(); int z[50]; vector v3(z,11); cout<<"vectorul interclasat v3 = ";inter(v1,v2,v3); v3.afisare(); In urma executiei programului se vor afisa urmatoarele rezultate: 8

Probleme propuse spre rezolvare: 1. Inlocuiti constructorul clasei complex cu alt constructor la care numele parametrilor de intrare concide cu cel al datelor membru (real si imag). 2. Adaugati clasei complex o metoda care returneaza o referinta catre obiectul curent si o alta care returneaza un pointer catre obiectul curent. 3. Adaugati clasei list o metoda realizata prin supraincarcarea operatorului -, cu rolul ca fiecare element al listei liniare, care retine valoarea v, dupa executie sa retina valoarea v. 4. Adaugati clasei list o metoda realizata prin supraincarcarea operatorului -, cu rolul de a inversa fiecare element din lista. 5. Adaugati clasei list mai multe metode realizate prin supraincarcarea operatorilor ++ si --, astfel daca l este un obiect de tip list, atunci prin: ++l se adauga la inceputul listei un element care retine 0; l++ se adauga la sfarsitul listei un element care retine 0; --l se elimina primul element al listei; l-- se elimina ultimul element al listei. 6. Adaugati clasei vector o metoda realizata prin supraincarcarea operatorului &, cu rolul de a inversa elementele dintr-un vector. 7. Adaugati clasei sir o metoda realizata prin supraincarcarea operatorului <, cu rolul de a compara doua obiecte de tip sir. 9