Differences

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

Link to this comparison view

poo-is:laboratoare:03 [2020/09/09 12:24]
alexandru.ionita99 [2. Structura de fișiere a unei aplicații]
poo-is:laboratoare:03 [2020/10/22 12:30] (current)
andreea.udrea
Line 1: Line 1:
-===== Laboratorul 03: Definirea și utilizarea claselor. Funcții ​constructor ​=====+===== Laboratorul 03: Clase. Funcții ​Constructor ​=====
  
-**__Introducere__\\+In cadrul Laboratorului 3 vom explica si exemplifica cateva notiuni teoretice ce stau la baza Programarii Orientate pe Obiecte, precum clasele, functiile membre, constructorii si destructorii. De asemenea, vom prezenta o aplicatie C++, construita prin crearea de fisiere distincte, tocmai pentru a ne obisnui cu acest mod de dezvoltare a aplicatiilor. ​
  
-__Resurse__**+Pentru a aprofunda aceste concepte, recomandam urmatoarele capitole din [[https://​discourse-production.oss-cn-shanghai.aliyuncs.com/​original/​3X/​2/​3/​2380479dcb8e375425884a10da232730bbc7f88d.pdf|Absolute C++]] 
 +  ​Capitolul 6 (Chapter 6. pag 239-274): Structures and Classes 
 +  ​Capitolul 7 (Chapter 7. pag 275-320): Constructors and Other Tools
  
 ==== 1. Introducere în programarea obiectuală ==== ==== 1. Introducere în programarea obiectuală ====
Line 37: Line 39:
 { {
   private: //implicit private, daca nu specificam ​   private: //implicit private, daca nu specificam ​
-   ​string producator;+   ​string producator; ​// pentru tipul string folositi documentatia din laboratorul 10
    ​string model;    ​string model;
    ​string culoare;    ​string culoare;
Line 146: Line 148:
 } }
  
-Dreptunghi::​Dreptunghi(const Dreptunghi&​ d) +Dreptunghi::​Dreptunghi(const Dreptunghi&​ d) //As putea sa nu implementez constr de copiere si sa il folosesc pe cel generat automat. 
-{+                                          //deoarece nu am atribute pointer
     this->​lungime = d.lungime;     this->​lungime = d.lungime;
     this->​latime = d.latime;     this->​latime = d.latime;
Line 154: Line 156:
 Dreptunghi::​~Dreptunghi() Dreptunghi::​~Dreptunghi()
 { {
-    //Nu trebuie eliberat manual spatiul de memorie. ​Eventual, putem seta parametrii egali cu 0: +    //Nu trebuie eliberat manual spatiul de memorie. ​As putea sa nu implementez destructorul si sa il folosesc pe cel generat automat. 
-    ​this->​lungime = 0; + 
-    ​this->​latime = 0;+   ​
 } }
  
Line 175: Line 177:
 <note warning>​Impartirea in fisiere header si sursa nu este obligatorie,​ dar este indicata pentru usurinta in citirea codului. </​note>​ <note warning>​Impartirea in fisiere header si sursa nu este obligatorie,​ dar este indicata pentru usurinta in citirea codului. </​note>​
  
-In continuare, vom prezenta un exemplu de aplicatie ce respecta structura de fisiere mentionata anterior. ​Aplicatia ​poate fi **rulata si descarcata** [[https://​repl.it/​@alexionita99/​lab3stack|aici]]:​+In continuare, vom prezenta un exemplu de aplicatie ce respecta structura de fisiere mentionata anterior. ​Fisierele pot fi descarcate printr-un click pe numele lor, iar intreaga aplicatie ​poate fi **rulata si descarcata** [[https://​repl.it/​@alexionita99/​lab3stack|aici]]:​
  
 Fisierul **stack.h** contine definitia clasei: Fisierul **stack.h** contine definitia clasei:
-<code cpp> +<code cpp stack.h
-class stack { +class stack  
-int *buf; +
-int sp; // Acesti membri sunt impliciti private. +    int *buf; 
-int nrmax; // Ei pot fi accesati doar prin functii (metode) +    int sp; // Acesti membri sunt impliciti private. 
-char nume[10]; // ale clasei +    int nrmax; // Ei pot fi accesati doar prin functii (metode) 
 +    char nume[10]; // ale clasei
  
 public: public:
Line 192: Line 194:
 // Functia constructor este apelata la crearea obiectelor (statica, auto sau dinamica). // Functia constructor este apelata la crearea obiectelor (statica, auto sau dinamica).
 // //
-stack (const char *); +    ​stack (const char *); 
-stack (int, const char *); // Alt constructor care va fi definit in exterior+    stack (int, const char *); // Alt constructor care va fi definit in exterior
  
-~stack(); // Destructor: functie care va fi apelata la incetarea+    ​~stack(); // Destructor: functie care va fi apelata la incetarea
 // duratei de viata a obiectului // duratei de viata a obiectului
  
-int is_empty() { return sp == -1; }     // Functii implementate in  +    ​int is_empty() { return sp == -1; }     // Functii implementate in  
-int is_full() { return sp == nrmax-1; } // definitia clasei +    int is_full() { return sp == nrmax-1; } // definitia clasei 
-void push (int); +    void push (int); 
-int pop(); +    int pop(); 
-char *getnume() { return (char *) nume; }+    char *getnume() { return (char *) nume; }
 }; };
  
Line 220: Line 222:
 Fisierul **stack.cpp** contine implementarile metodelor clasei (doar cele care nu au fost implementate in definitie): Fisierul **stack.cpp** contine implementarile metodelor clasei (doar cele care nu au fost implementate in definitie):
  
-<code cpp>+<​code ​cpp stack.cpp>
 #include <​iostream>​ #include <​iostream>​
 #include <​cstdlib>​ #include <​cstdlib>​
Line 280: Line 282:
 Fisierul **main.cpp** reprezinta programul principal (de test): Fisierul **main.cpp** reprezinta programul principal (de test):
  
-<code cpp>+<​code ​cpp main.cpp>
 #include <​iostream>​ #include <​iostream>​
 #include <​cstdlib>​ #include <​cstdlib>​
Line 290: Line 292:
 int main(int argc, char *argv[]) int main(int argc, char *argv[])
 { {
-int i; +    ​int i; 
-stack b("​b"​);​ +    stack b("​b"​);​ 
-cout << "​\n\n"​ << "Start main\n";​+    cout << "​\n\n"​ << "Start main\n";​
  
-stack c(200, "​c"​);​ +    ​stack c(200, "​c"​);​ 
-stack *pd = new stack(300, "​d"​);​+    stack *pd = new stack(300, "​d"​);​
  
-a.push(1);​ +    ​a.push(1);​ 
-a.push(2);​ +    a.push(2);​ 
-pd->​push(3);​ +    pd->​push(3);​ 
-cout << "Pop din stiva " << pd->​getnume() << ": " << pd->​pop() << "​\n";​+    cout << "Pop din stiva " << pd->​getnume() << ": " << pd->​pop() << "​\n";​
  
 // //
 // Etc., etc. // Etc., etc.
 // //
-delete pd; // A fost alocat dinamic, deci eliberam memoria +    ​delete pd; // A fost alocat dinamic, deci eliberam memoria 
-cout << "​Sfarsit main\n";​+    cout << "​Sfarsit main\n";​
  
-system("​PAUSE"​);​ +    ​system("​PAUSE"​);​ 
-return EXIT_SUCCESS;​+    return EXIT_SUCCESS;​
 } }
  
 </​code>​ </​code>​
  
-Se defineste un obiect stack la nivel exterior **"​a"​** (cu alocare statica). El va fi creat inainte de a incepe executia functiei **main**. In **main** ​sunt instantiate doua obiecte (**"​b"​ si "​c"​**) si inca unul prin **alocare dinamica** (a se vedea forma **new stack(...)**). Apoi se fac cateva operatii uzuale cu stivele astfel definite. La consola se va urmari si explica secventa de mesaje din functiile constructor,​ destructor si main. De observat afisarea comoda la consola (cout) cu operatorul << (necesar **#include <​iostream.h>​**).+Se defineste un obiect stack la nivel exterior **"​a"​** (cu alocare statica). El va fi creat inainte de a incepe executia functiei **main**. In main sunt **instantiate** doua obiecte (**"​b"​ si "​c"​**) si inca unul prin **alocare dinamica** (a se vedea forma **new stack(...)**). Apoi se fac cateva operatii uzuale cu stivele astfel definite. La consola se va urmari si explica secventa de mesaje din functiile constructor,​ destructor si main. De observat afisarea comoda la consola (cout) cu operatorul << (este necesar **#include <​iostream.h>​**).
  
  
poo-is/laboratoare/03.1599643479.txt.gz · Last modified: 2020/09/09 12:24 by alexandru.ionita99
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