Differences

This shows you the differences between two versions of the page.

Link to this comparison view

poo-is:laboratoare:02 [2020/09/08 06:50]
sergiu.craioveanu [7. Alocari dinamice de memorie]
poo-is:laboratoare:02 [2020/10/01 12:27] (current)
alexandru.ionita99 [3. Functii membre ale unei structuri]
Line 1: Line 1:
-====== Laboratorul 02: Elemente ​specifice ​C++ ======+====== Laboratorul 02: Elemente ​Specifice ​C++ ======
  
 Laboratorul de azi are ca scop acomodarea voastra cu limbajul C++. Asta presupune tranzitia de la limbajul C, dar si intelegerea conceptelor elementare, noi, ce tin de C++. Asadar, materialul de astazi poate fi vazut ca un fel de 'Crash Course'​ pentru C++. El reprezinta minimul necesar care trebuie stiut pentru a intelege continutul laboratoarelor urmatoare, dar nu elimina necesitatea voastra de a exersa cu limbajul pentru a deveni familiari cu acesta. ​ Laboratorul de azi are ca scop acomodarea voastra cu limbajul C++. Asta presupune tranzitia de la limbajul C, dar si intelegerea conceptelor elementare, noi, ce tin de C++. Asadar, materialul de astazi poate fi vazut ca un fel de 'Crash Course'​ pentru C++. El reprezinta minimul necesar care trebuie stiut pentru a intelege continutul laboratoarelor urmatoare, dar nu elimina necesitatea voastra de a exersa cu limbajul pentru a deveni familiari cu acesta. ​
Line 8: Line 8:
   * Capitolul 1 (Chapter 1. pag 1-45): C++ Basics   * Capitolul 1 (Chapter 1. pag 1-45): C++ Basics
   * Capitolul 2 (Chapter 2. pag 45-99): Flow of Control (if-else, for etc)   * Capitolul 2 (Chapter 2. pag 45-99): Flow of Control (if-else, for etc)
 +  * Capitolul 10 (Chapter 10. pag 419-471): Pointers and Dynamic Arrays
  
  
Line 46: Line 47:
 </​code>​ </​code>​
  
-===== 3. Functii Inline =====+===== 3. Functii membre ale unei structuri ===== 
 + 
 +Pentru a modifica campurile unei variabile de tip struct, putem utiliza **functiile membre** (**metode**). Aceste functii au urmatoarele caracteristici:​ \\ 
 +  * variabila struct asupra careia se lucreaza **nu** este data ca parametru 
 +  * nu cresc dimensiunea tipului de date 
 +  * au acces direct la campurile structurii, inclusiv cele declarate **private** 
 + 
 +Vom prezenta un exemplu de utilizare al acestor functii. Utilitatea lor se va vedea mai bine in cazul programarii obiectuale. \\ 
 +Exemplul poate fi rulat [[https://​repl.it/​@alexionita99/​lab2struct|aici]] 
 + 
 +<code cpp> 
 +#include <​iostream>​ 
 +#include <​cstdlib>​ 
 + 
 +using namespace std; 
 + 
 +struct point{ 
 +  private: //altfel, sunt implicit public 
 +    int x; 
 +    int y; 
 +  public: //pentru a fi vizibile de oriunde 
 +    void modificare(int,​ int); //​implementarile functiilor se face 
 +    void afisare(); ​           //dupa definirea structurii 
 +}; 
 + 
 +//​Implementarea metodelor din struct 
 +void point::​modificare(int xx, int yy) 
 +
 +  x = xx; //functiile membre au acces la campurile private 
 +  y = yy; 
 +
 + 
 +void point::​afisare() 
 +
 +  cout << x << " " << y << endl; 
 +
 + 
 + 
 +int main()  
 +
 +  point p; //​declararea unei variabile de tip struct point 
 +   
 +  //Apelam metodele pentru variabila p. Nu o dam ca parametru:​ 
 +   
 +  p.afisare();​ //va afisa ce se afla in memorie, la adresele campurilor x si y 
 + 
 +  p.modificare(3,​ 3); //modificam valorile lui x si y folosind functia membra 
 + 
 +  p.afisare();​ //va afisa noile valori 3 si 3 
 + 
 +  return 0; 
 +
 + 
 +</​code>​ 
 +===== 4. Functii Inline =====
  
 O functie inline e definita in felul urmator: O functie inline e definita in felul urmator:
Line 80: Line 135:
  
  
-===== 4. Supradefinirea functiilor =====+===== 5. Supradefinirea functiilor =====
 In   ​C++ ​ este  permisa ​ supradefinirea ​ functiilor, ​  adica existenta ​ mai  multor functii cu acelasi nume, dar  care  difera prin  tipul  si/sau numarul parametrilor. Decizia de  a  apela  o  In   ​C++ ​ este  permisa ​ supradefinirea ​ functiilor, ​  adica existenta ​ mai  multor functii cu acelasi nume, dar  care  difera prin  tipul  si/sau numarul parametrilor. Decizia de  a  apela  o 
 functie sau alta se face dupa tipul sau numarul parametrilor. functie sau alta se face dupa tipul sau numarul parametrilor.
Line 123: Line 178:
 </​code>​ </​code>​
  
-===== 5. Operatorii de scriere (>>) si citire (<<) =====+===== 6. Operatorii de scriere (>>) si citire (<<) =====
 Prin acesti operatori se pot face scrieri si citiri la consola in formate predefinite. Aceasta ne scuteste de folosirea functiilor de tip printf/​scanf etc. si ofera o forma comoda de I/O. Prin acesti operatori se pot face scrieri si citiri la consola in formate predefinite. Aceasta ne scuteste de folosirea functiilor de tip printf/​scanf etc. si ofera o forma comoda de I/O.
  
Line 146: Line 201:
  
  
-===== 6. Tipul referinta =====+===== 7. Tipul referinta =====
  
 O declaratie de forma O declaratie de forma
Line 212: Line 267:
 </​code>​ </​code>​
  
-===== 7. Alocari dinamice de memorie =====+===== 8. Alocari dinamice de memorie =====
 Alocarea ​ de memorie se face in C++ cu operatorul **new** ​ (care face parte din limbaj). ​ Alocarea ​ de memorie se face in C++ cu operatorul **new** ​ (care face parte din limbaj). ​
 Enumeram urmatoarele forme de alocare: Enumeram urmatoarele forme de alocare:
Line 256: Line 311:
 </​code>​ </​code>​
  
-Metoda prezentata mai sus este nefolosita in industrie, tipul ** char* ** fiind inlocuit de tipul C++ **string**. Pentru mai multe detalii asupra clasei **string**, click [[https://​www.tutorialspoint.com/​cplusplus/​cpp_strings.htm|aici]]. De asemenea, puteti inspecta Capitolul 9 (Chapter 9) : Strings, din cartea [[https://​discourse-production.oss-cn-shanghai.aliyuncs.com/​original/​3X/​2/​3/​2380479dcb8e375425884a10da232730bbc7f88d.pdf|Absolute C++]] pentru explicatii suplimentare,​ dar si exemple concrete.+Metoda prezentata mai sus este nefolosita in industrie, tipul ** char* ** fiind inlocuit de tipul C++ **string**. Pentru mai multe detalii asupra clasei **string**, click [[https://​www.tutorialspoint.com/​cplusplus/​cpp_strings.htm|aici]]. De asemenea, puteti inspecta Capitolul 9 (Chapter 9, pag 367-) : Strings, din cartea [[https://​discourse-production.oss-cn-shanghai.aliyuncs.com/​original/​3X/​2/​3/​2380479dcb8e375425884a10da232730bbc7f88d.pdf|Absolute C++]] pentru explicatii suplimentare,​ dar si exemple concrete.
  
-===== 8. Functii cu parametri impliciti =====+===== 9. Functii cu parametri impliciti =====
  
 Functia ​ print_tab de mai jos are trei  parametri, ​ dintre ​ care ultimul ​ este  de  tip pointer la  char,  care  este  initializat implicit ​ pe  sirul constant "Mesaj implicit"​. ​ Functia ​ print_tab de mai jos are trei  parametri, ​ dintre ​ care ultimul ​ este  de  tip pointer la  char,  care  este  initializat implicit ​ pe  sirul constant "Mesaj implicit"​. ​
Line 277: Line 332:
 </​code> ​ </​code> ​
  
-===== 9. Experiment =====+===== 10. Experiment =====
 Ca sa testati toate conceptele prezentate in acest laborator, rulati codul de mai jos apasand [[https://​repl.it/​@thesergiu/​lab2experiment#​main.cpp|aici]]. Ca sa testati toate conceptele prezentate in acest laborator, rulati codul de mai jos apasand [[https://​repl.it/​@thesergiu/​lab2experiment#​main.cpp|aici]].
  
poo-is/laboratoare/02.1599537028.txt.gz · Last modified: 2020/09/08 06:50 by sergiu.craioveanu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0