Differences

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

Link to this comparison view

poo-is:laboratoare:02 [2020/09/07 15:34]
sergiu.craioveanu
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. ​
  
 Inainte de fiecare laborator, vom prezenta surse aditionale de informare, unde veti putea gasi explicatii suplimentare si exemple concrete. Inainte de fiecare laborator, vom prezenta surse aditionale de informare, unde veti putea gasi explicatii suplimentare si exemple concrete.
Line 6: 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 44: 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 78: 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 121: 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 144: Line 201:
  
  
-===== 6. Tipul referinta =====+===== 7. Tipul referinta =====
  
 O declaratie de forma O declaratie de forma
Line 210: 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 254: 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, ​inspectati resursele utile 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 275: 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.1599482095.txt.gz · Last modified: 2020/09/07 15:34 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