C++ POO Lab Lucrarea 3

De la WikiLabs
Versiunea din 28 martie 2022 20:09, autor: Costin.vasile1003 (discuție | contribuții) (Pagină nouă: Această lucrare are ca scop familiarizarea cu următoarele noțiuni: * Destructorul * Referința * Supraîncărcarea operatorilor = Destructorul = Așa cum s-a prezentat în la...)
(dif) ← Versiunea anterioară | Versiunea curentă (dif) | Versiunea următoare → (dif)
Jump to navigationJump to search

Această lucrare are ca scop familiarizarea cu următoarele noțiuni:

  • Destructorul
  • Referința
  • Supraîncărcarea operatorilor


Destructorul

Așa cum s-a prezentat în laboratorul anterior, crearea unui obiect se face folosind o metodă specială, numită constructor. Printre altele, cu ajutorul constructorului putem:

  • Inițializa câmpurile obiectului pe care îl construim
  • Condiționa valorile cu care inițializăm câmpurile (de exemplu vârsta unei persoane nu poate avea valoare negativa)
  • Aloca memorie în mod dinamic

Pe de altă parte, odată ce nu mai avem nevoie de un obiect, acesta trebuie eliminat într-un mod controlat, astfel încât memoria ocupată să poată fi refolosită. Acest lucru este realizat cu ajutorul unei alte metode speciale, numită destructor, ce este apelată automat atunci când contextul în care a fost declarat obiectul se încheie (out of scope). Pentru mai multe informații legate de context (scope) în C++, accesați acest link.


În exemplul de mai jos sunt evidențiate mecanismele de ’construire’ si ’distrugere’ a obiectelor:

#include <iostream>

// clasa Array modeleaza un array alocat dinamic
class Array{
public:
    int *arr;

    // constructorul aloca memorie si stocheaza adresa primului element in *arr
    Array(int dimensiune){
        arr = (int*) malloc(dimensiune * sizeof(int));
        std::cout << "Acest mesaj provine din constructor" << std::endl;
    }

    // destructorul se asigura ca memoria alocata este eliberata atunci cand obiectul este distrus
    ~Array(){
        free(arr);
        std::cout << "Acest mesaj provine din destructor" << std::endl;
    }
};

int main() {
    Array array(4);
    std::cout << "Obiectul a fost construit!" << std::endl;

    return 0;
}

Dacă executăm acest program obținem următorul output:

Acest mesaj provine din constructor
Obiectul a fost construit!
Acest mesaj provine din destructor

Observăm că, odată ce contextul în care a fost declarat obiectul (contextul este, aici, funcția main), destructorul acestui obiect a fost apelat automat si a fost generat mesajul corespunzător.

Referința

Supraîncărcarea operatorilor