This shows you the differences between two versions of the page.
|
poo-is-ab:laboratoare:02 [2026/09/28 12:22] razvan.cristea0106 [Diferențe C/C++] |
poo-is-ab:laboratoare:02 [2026/09/28 12:30] (current) razvan.cristea0106 |
||
|---|---|---|---|
| Line 8: | Line 8: | ||
| * recunoască diferențele dintre C și C++ | * recunoască diferențele dintre C și C++ | ||
| - | * realizeze unui program în C++ care să valorifice caracteristicile și facilitățile specifice limbajului | + | * realizeze un program în C++ care să valorifice caracteristicile și facilitățile specifice limbajului |
| ==== Introducere ==== | ==== Introducere ==== | ||
| Line 18: | Line 18: | ||
| === Citirea și afișarea variabilelor === | === Citirea și afișarea variabilelor === | ||
| - | În C pentru citirea și afișare variabilor se realiza utilizând funcțiile **scanf** și **printf**. În C++ vom folosi operatorul **%%>>%%** pentru citirea datelor de la tastatură sau din fișiere și operatorul **%%<<%%** pentru afișarea datelor în fișiere sau consolă. | + | În C pentru citirea și afișare variabilor se realizau utilizând funcțiile **scanf** și **printf**. În C++ vom folosi operatorul **%%>>%%** pentru citirea datelor de la tastatură sau din fișiere și operatorul **%%<<%%** pentru afișarea datelor în fișiere sau consolă. |
| == Citirea și afișarea în C == | == Citirea și afișarea în C == | ||
| Line 56: | Line 56: | ||
| </code> | </code> | ||
| - | <note>Este de menționat faptul ca în C++ și funcțiile **scanf** și **printf** se pot utiliza, dar ca și recomandare ar fi mai indicată utilizarea operatorilor de citire și afișare ai limbajului, deoarece sunt mai specializați pentru ceea ce vom învăța pe parcursul semestrului.</note> | + | <note>Este de menționat faptul că în C++ și funcțiile **scanf** și **printf** se pot utiliza, dar ca și recomandare ar fi mai indicată utilizarea operatorilor de citire și afișare ai limbajului, deoarece sunt mai specializați pentru ceea ce vom învăța pe parcursul semestrului.</note> |
| == Citirea și scrierea datelor în fișiere == | == Citirea și scrierea datelor în fișiere == | ||
| - | În această secțiune vom prezenta modul de citire și scriere a datelor în fișierele text în limbajul C++. La fel ca în limbajul C aici avem posibilitatea să folosim funcțiile **fscanf** și **fprintf** însă se recomandă folosirea librăriei **fstream** care este specializată pentru lucrul cu fișiere. Dacă dorim să citim date dintr-un fișier vom volosi variabile de tipul **ifstream** (**input file stream**) iar pentru pentru scriere se utilizează tipul **ofstream** (**output file stream**). | + | În această secțiune vom prezenta modul de citire și scriere a datelor în fișierele text în limbajul C++. La fel ca în limbajul C aici avem posibilitatea să folosim funcțiile **fscanf** și **fprintf** însă se recomandă folosirea librăriei **fstream** care este specializată pentru lucrul cu fișiere. Dacă dorim să citim date dintr-un fișier vom folosi variabile de tipul **ifstream** (**input file stream**) iar pentru scriere se utilizează tipul **ofstream** (**output file stream**). |
| Mai jos este prezentat un exemplu simplu de folosire a datelor de tip **ifstream** și **ofstream**. | Mai jos este prezentat un exemplu simplu de folosire a datelor de tip **ifstream** și **ofstream**. | ||
| Line 136: | Line 136: | ||
| === Alocarea dinamică a memoriei === | === Alocarea dinamică a memoriei === | ||
| - | Dacă în cazul citirii și afișării variabilelor lucrurile nu erau cu mult diferite, dacă discutăm despre alocare dinamică există câteva diferențe seminficative pe care o sa le observăm în exemplele următoare. | + | Dacă în cazul citirii și afișării variabilelor lucrurile nu erau cu mult diferite, dacă discutăm despre alocare dinamică există câteva diferențe semnificative pe care o să le observăm în exemplele următoare. |
| == Alocare dinamică în C == | == Alocare dinamică în C == | ||
| Line 168: | Line 168: | ||
| </code> | </code> | ||
| - | Dacă dorim să alocăm dinamic a un vector putem proceda în felul următor. | + | Dacă dorim să alocăm dinamic un vector putem proceda în felul următor. |
| <code cpp> | <code cpp> | ||
| Line 390: | Line 390: | ||
| </code> | </code> | ||
| - | Pentru a înțelge mai bine, în desenul de mai jos se poate observa de fapt cine este **ref** și că nu face altceva decât să partajeze aceeași zonă de memorie ca și **x**. | + | Pentru a înțelege mai bine, în desenul de mai jos se poate observa de fapt cine este **ref** și că nu face altceva decât să partajeze aceeași zonă de memorie ca și **x**. |
| {{ :poo-is-ab:laboratoare:reference_logic.jpg |}} | {{ :poo-is-ab:laboratoare:reference_logic.jpg |}} | ||
| Line 511: | Line 511: | ||
| <note important>Trebuie subliniat faptul că **tipul de return** al unei funcții **nu** este luat în considerare în contextul **polimorfismului prin supraîncărcare**. Ceea ce definește **polimorfismul** în acest caz este exclusiv **semnătura funcției**, adică **numele împreună cu lista și tipurile parametrilor**. De aceea, două funcții care diferă doar prin tipul valorii returnate **nu** sunt considerate supraîncărcări valide, generând astfel o eroare de compilare. În schimb, funcțiile care diferă prin **numărul**, **tipul** sau chiar **ordinea** parametrilor reprezintă forme acceptate de **polimorfism**, așa cum se poate observa în cazul ultimelor patru funcții din cadrul exemplului de mai sus.</note> | <note important>Trebuie subliniat faptul că **tipul de return** al unei funcții **nu** este luat în considerare în contextul **polimorfismului prin supraîncărcare**. Ceea ce definește **polimorfismul** în acest caz este exclusiv **semnătura funcției**, adică **numele împreună cu lista și tipurile parametrilor**. De aceea, două funcții care diferă doar prin tipul valorii returnate **nu** sunt considerate supraîncărcări valide, generând astfel o eroare de compilare. În schimb, funcțiile care diferă prin **numărul**, **tipul** sau chiar **ordinea** parametrilor reprezintă forme acceptate de **polimorfism**, așa cum se poate observa în cazul ultimelor patru funcții din cadrul exemplului de mai sus.</note> | ||
| + | |||
| ==== Concluzii ==== | ==== Concluzii ==== | ||
| Prin parcurgerea acestui laborator, putem spune cu certitudine că limbajul C++ reprezintă o evoluție firească a limbajului C, adăugând numeroase concepte și mecanisme care ne fac munca de programatori mai simplă și mai expresivă. Am văzut că librăria **fstream**, alocarea dinamică realizată într-un mod simplificat, introducerea referințelor, posibilitatea de a supraîncărca funcții și suportul pentru **Programarea Orientată Obiect** diferențiază C++ de C și ne oferă un cadru mai flexibil pentru dezvoltarea aplicațiilor. Totuși, este important să reținem faptul că C++ rămâne compatibil cu C la nivel de bază, ceea ce îl face un limbaj versatil, potrivit atât pentru stilul **procedural**, cât și pentru cel **orientat pe obiecte**. | Prin parcurgerea acestui laborator, putem spune cu certitudine că limbajul C++ reprezintă o evoluție firească a limbajului C, adăugând numeroase concepte și mecanisme care ne fac munca de programatori mai simplă și mai expresivă. Am văzut că librăria **fstream**, alocarea dinamică realizată într-un mod simplificat, introducerea referințelor, posibilitatea de a supraîncărca funcții și suportul pentru **Programarea Orientată Obiect** diferențiază C++ de C și ne oferă un cadru mai flexibil pentru dezvoltarea aplicațiilor. Totuși, este important să reținem faptul că C++ rămâne compatibil cu C la nivel de bază, ceea ce îl face un limbaj versatil, potrivit atât pentru stilul **procedural**, cât și pentru cel **orientat pe obiecte**. | ||