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

Documente similare
Top

Microsoft Word - CarteC.doc

Limbaje de Programare Curs 5 – Siruri de caractere

Limbaje de Programare Curs 6 – Functii de intrare-iesire

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

L7

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

Microsoft Word - PCLP2_Curs_4_2019.doc

Programarea şi utilizarea calculatoarelor

Slide 1

Object Oriented Programming

Slide 1

SUBPROGRAME

Paradigme de programare

-

E_d_Informatica_sp_SN_2014_bar_10_LRO

Laborator 3

Microsoft Word - CarteC.doc

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

E_d_Informatica_sp_MI_2015_bar_02_LRO

Slide 1

Limbaje de Programare Curs 8 – Fisiere

Programarea calculatoarelor. Note de curs Marius Minea 1 Introducere în programarea în C 1.1 Funcţii în limbajul C Calcule şi funcţii La origine, rolu

Paradigme de Programare

Programarea şi utilizarea calculatoarelor

Microsoft PowerPoint - Curs_SDA_4_RO_2019_v2.pptx

Preprocesorul C Funcţii cu numǎr variabil de argumente 6 decembrie 2005 Programarea calculatoarelor 2. Curs 10 Marius Minea

Microsoft Word - O problema cu bits.doc

Microsoft Word - lab4.doc

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

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 Word _POO_Lab_1_Modificari_v01.htm

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

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

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

tehnologii web

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

Microsoft PowerPoint - Curs_SDA_3_RO_2019_v2.pptx

LUCRAREA NR

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

/*

-

Declararea variabilelor

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

proiectarea bazelor de date

Logică și structuri discrete Limbaje regulate și automate Marius Minea marius/curs/lsd/ 24 noiembrie 2014

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

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

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

Aggregating Data

PROGRAMARE ORIENTATA PE OBIECTE

Subiectul 1

1

PHP (II)

Slide 1

CURS

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

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 - CarteC.doc

Tipuri de date abstracte 30 noiembrie 2005 Programarea calculatoarelor 2. Curs 9 Marius Minea

7. Alinierea robustă a densităţilor de puncte 3D Măsurarea distanţei dintre diferite forme geometrice 3D Estimarea rotaţiei şi a translaţiei optime în

Managementul Resurselor Umane

PowerPoint-Präsentation

Laborator 7: PROIECTAREA BAZELOR DE DATE SUBPROGRAME in PL/SQL (partea I - proceduri) Un subprogram este un bloc PL/SQL cu nume (spre deosebire de blo

Microsoft PowerPoint - Curs_SDA_10_RO_2019_v1.pptx

Microsoft PowerPoint - Curs_SDA_9_RO_2019_v2.pptx

Analiză statică Analiza fluxului de date 23 octombrie 2014

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

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

Ingineria Sistemelor de Programare

Analiză de flux de date 29 octombrie 2012

Lab6LCD

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

Programarea şi utilizarea calculatoarelor

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

Laborator 8: PROIECTAREA BAZELOR DE DATE SUBPROGRAME in PL/SQL (partea II - functii) Un subprogram este un bloc PL/SQL cu nume (spre deosebire de bloc

Microsoft Word - 2 ES RO.doc

Microsoft Word - Laborator 6 - Expresii Regulate IV.doc

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

Ingineria Sistemelor de Programare

Laborator - Configurarea Rutelor IPv4 Statice și Implicite Topologie Tabela de Adresare Echipame nt Interfață Adresă IP Masca de subreţea Default Gate

/*

Logică și structuri discrete Relații. Funcții parțiale Marius Minea marius/curs/lsd/ 20 octombrie 2014

ALGORITHMICS

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

Microsoft PowerPoint - Curs_TPI_22_v01.ppt

4. Detectarea cantelor Calculul gradientului într-o imagine Detectorul de cante Canny Transformata Hough În această lucrare vor fi studiate metode de

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

Microsoft Word - Cuprins_LP.doc

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

Adresarea memoriei Modurile de adresare constituie un instrument principal pentru reprezentarea în memorie a imaginii datelor, aşa cum este ace

Lucrarea nr

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

Poo Laboratoare 1 Contents Laborator7 2 1 Colecţii de obiecte în Java Interfaţa Iterator Interfaţa C

Microsoft Word - Curs 7 - JavaScript.doc

Slide 1

Microsoft Word - Algoritmi genetici.docx

PROBLEME PRIVIND INSTABILITATEA UNOR CALCULE ALE MECANISMELOR

Platformăde e-learning și curriculăe-content pentru învățământul superior tehnic Sisteme de operare 13. Planificarea proceselor

Transcriere:

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 a două funcţii care au acelaşi nume În C++ acest lucru este posibil cu următoarea precizare: funcţiile nu pot să difere doar prin valoarea returnată, este obligatoriu ca lista de parametrii sa fie diferită (tipurile variabilelor din lista de parametri) Exemplu: Să se scrie două funcţii una care adună două numere şi una care adună două şiruri de caractere #include <stringh> int add(int a, int b){ return a+b; char * add(char *s1, char *s2){ char *rez = new char[strlen(s1)+strlen(s2)+1]; strcpy(rez, s1); strcat(rez, s2); return rez; void main(){ int a = 10, b =10; cout << "Adunare de numere " << add(a,b) << endl; char *s1="primul ", *s2="laborator!"; cout << "Adunare de caractere " << add(s1,s2) << endl; Funcţii inline Cuvântul cheie inline pus în faţa unei funcţii indică compilatorului să expandeze acea funcţie în momentul compilării, astfel încât codul obiect generat nu va conţine un apel de funcţie, ci va conţine codul obiect corespunzător acelei funcţii Obs: 1 inline este doar o indicaţie, a cărei implementare diferă de la compilator la compilator 2 Funcţile inline înlocuiesc cu succes macrourile construite cu #define şi evită neajunsurile acestor cauzate de expandarea codului sursa: - nu pot returna valori; - parametrii trebuie să fie precizaţi între paranteze, pentru o evaluarea conforma cu precedenţa operatorilor; - nu pot verifica tipul operanzilor Macrodefiniție Funcție inline #define Max(a,b) ((a)<(b))? (b) : (a) inline int Max(int a, int b) { return (a<b)? b : a ; #include <timeh>

inline void swap_inline(int *a, int *b, int *c, int *d) { int temp; temp = *a; *a = *b; *b = temp; temp = *c; *c = *d; *d = temp; void swap_call(int *a, int *b, int *c, int *d) { int temp; temp = *a; *a = *b; *b = temp; temp = *c; *c = *d; *d = temp; int main() { clock_t start, stop; long int i; int a = 1, b = 2, c = 3, d = 4; start = clock(); for(i = 0; i < 100L; i++) swap_inline(&a, &b, &c, &d); stop = clock(); cout << "Timp apel functie inline: " << stop - start << endl; start = clock(); for(i = 0; i < 900000L; i++) swap_call(&a, &b, &c, &d); stop = clock(); cout << "\ndurata pentru functia apelata: " << stop - start << endl; Alocarea dinamică a memoriei folosind operatorii new şi delete Spre deosebire de limbajul C (în care managementul memoriei era implementat în biblioteci auxiliare şi era pus la dispoziţia programatorilor prin intermediul unor funcţii), în C++ au fost introduşi doi noi operatori pentru managementul memoriei: new pentru alocarea memoriei cu sintaxa: tip _ptr =new tip tip _ptr =new tip(val_initializare) tip _ptr =new tip[n] unde: tip reprezintă tipul variabilei, care poate fi orice tip de date; _ptr o variabilă de tip pointer; val_initializare expresie cu a cărei valoare se iniţializează variabila dinamică Rezultatul alocări poate fi un pointer spre tipul declarat sau valoarea NULL in caz de eşec delete pentru dealocarea memoriei cu sintaxa: delete _ptr Aceşti operatori, pe lângă alocarea zonei de memoriei necesare, efectuează în plus operaţiile necesare iniţializării zonei respective, care sunt extrem de importante in cazul obiectelor Exemplu: Scrieţi un program care aloca memorie pană toata memoria este ocupată #include <newh> void no_mem(); int main(){ int *ip; long dim; set_new_handler(&no_mem); cout << "Dimensiune bloc: "; cin >> dim; for(int i=1;;i++){ ip = new int[dim]; cout << "Alocare bloc i=" << i << endl; void no_mem(){ cout << "Alocare imposibila \n";

exit(1); Operatorul rezoluţie (operator de acces) In C++ este definit operatorul rezoluţie :: care permite accesul la un identificator cu domeniul fişier, dintr-un bloc în care acesta nu e vizibil din cauza unei operaţii Exemplu: #include <stringh> // char str[20]="sir global"; void fct(){ char *str; str = "Sir local"; std::cout << ::str << std::endl; std::cout << str << std::endl; void main(){ fct(); Tratarea excepţiilor Tratarea excepţiilor permite tratarea problemelor care pot apărea într-un program într-un mod mai organizat Avantajul tratări excepţiilor îl constituie o automatizare mai mare a codului Tratarea excepţiilor se realizează prin blocuri try catch şi pot fi aruncate cu throw Sintaxă: catch(tip1 arg){ catch(tip2 arg){ catch(tipn arg){ throw exceptie; Unde: tip1,,tipn este un tip de date de bază sau o clasa exceptie este valoarea aruncată Blocul try va conţine secţiunea de cod unde se caută excepţiile, iar catch este folosit pentru a determina tipul excepţiei şi modul în care vor fi tratate excepţiile prinse Instrucţiunea throw se poate apela de oriunde din codul programului, într-un bloc try catch sau funcţie Dacă o eroare este aruncată şi nu este prinsă într-un bloc try catch ea va determina o terminare anormală a programului prin apelul funcţiilor abort() sau terminate() Exemplu: tratarea erorilor care pot apărea la împărţirea a două numere double impartire (double a, double b){

if (b == 0){ throw "Numitorul trebuie sa fie o valoare diferita de zero!"; return a/b; int main() { double a, b; cout << "a="; cin >> a; cout << "b="; cin >> b; cinignore(); cout << "a/b = " << impartire(a, b); catch(char * ex){ cout << "Exceptia prinsa este: " << ex; Prinderea tuturor excepţiilor care apar într-un bloc se poate face printr-un bloc catch( ) void fct(int i){ if (i==0) throw 3; if (i==1) throw "O alta exceptie"; if (i==2) throw 4333; catch(int a){ cout << "Exceptie int! (" << a << ")\n"; catch (){ cout << "Restul de exceptii!\n"; int main(){ fct(0); fct(1); fct(2); Cuvantul cheie auto În versiunea C++11 s-a intrudus cuvântul cheie auto care specifica tipul unei variabile Dacă o variabilă este declarată ca fiind auto tipul ei se stabileşte în funcţie de valoarea cu care este iniţializată Dacă tipul de return al unei funcţii este auto, tipul valorii de return este determinat de tipul valorii returnate using namespace std ; int main ( ) { auto a = 2 ; // declararea unei variabile de tip intreg auto b = 4 ; // declararea unei variabile de tip intreg auto proc ent = 3 6 ; // declarare a unei variabile de tip real double tablou [ ] = { 32, 15, 61, 9, 69, 10, 42; for ( auto i=a ; i<b ; i++) // declarare variabila de tip intreg cout << tablou [ i ] * procent << " " ; return 0 ;

Constanta nullptr În versiunea C++11 s-a introdus cuvântul cheie nullptr, care indica spre un pointer NULL, nu constanta 0 Un exemplu de iniţializare a unui pointer double cu nullptr este următorul: double *d = nullptr; Ambele variante de iniţializare cu valoare nula sunt acceptate, dar standadul de C++11 recomandă folosirea noii constante Probleme suplimentare 1 Să se scrie o funcţie care primeşte o dată calendaristică şi întoarce data calendaristica la care ne vom afla peste 5 zile (ex 6032012 11032012) Folosind conceptul de supraîncărcarea a funcţiilor funcţia trebuie să fie capabilă să primească diferiţii parametri: a modificaredata( 12/12/2012, ) b modificaredata( decembrie, 12, 2012) c Propuneţi o altă formă de apel 2 Realizaţi un program care calculează distanţa dintre două puncte 2D, 3D Pentru definirea unui punct 2D, respectiv 3D folosiţi structuri Folosiţi supraîncărcarea funcţiilor pentru 3 funcţii care realizează acţiuni distincte (ex funcţiile pentru calculul distanţei, afişare, etc) 3 Realizaţi un program care utilizează supraîncărcarea numelui de funcţii pentru a oferi funcţii care: adună un şir de numere întregi, adună un şir de numere reale, concatenează un şir de cuvinte Pentru alocarea de spaţiu folosiţi două abordări (malloc() şi free(), new şi delete)