02 - Konstruktor i destruktor
Konstruktor i destruktor
  • Definicija konstruktora
  • Primer upotrebe konstruktora
  • Konstruktor sa parametrima
  • Korišćenje liste za inicijalizaciju
  • Destruktor
  • Upotreba destruktora
02
Definicija konstruktora
Konstruktor klase je specijalna funkcija članica klase koja se izvršava svaki put kada se kreira nova instanca neke klase

Konstruktor klase je specijalna funkcija članica klase koja se izvršava svaki put kada se kreira nova instanca neke klase.

Konstruktor ima isti naziv kao i sama klasa, dok se povratni tip (tip rezultata) funkcije ne navodi. Njegova uloga je da izvrši inicijalizaciju podataka članova klase.

Opšti oblik definicije konstruktora je:

ime_klase :: ime_klase ( parametri )
{
 // sadrzaj - programski kod funkcije
}

Parametri se navode sa tipovima, na uobičajen način.

Primer upotrebe konstruktora
Konstruktor klase ne vraća nikakvu vrednost, čak ni void, pa se zato pri pisanju konstruktora piše samo njegovo ime bez tipa

Sledeći primer demonstrira upotrebu konstruktora:

#include <iostream>
using namespace std;
 
class Line
{
   public:
    void setLength( double len );
    double getLength( void );
    Line();  // Ovo je konstruktor
 
   private:
    double length;
};
 
// Definicija funkcija clanica klase, uklucujuci i konstruktor
Line::Line(void)
{
    cout << "Objekat je kreiran" << endl;
}

// Definicija funkcija clanica klase
double Line::getLength(void)
{
    return length ;
}
 
void Line::setLength( double len )
{
    length = len;
}

Glavni program može biti napisan na sledeći način:

int main( )
{
   Line line;
 
   // postavi duzinu linije
   line.setLength(6.0); 
   cout << "Duzina linije : " << line.getLength() << endl;
 
   return 0;
}

Rezultat izvršavanja programa je:

Objekat je kreiran
Duzina linije : 6
Konstruktor sa parametrima
Konstruktor sa parametrima omogućava da se kroz listu argumenata konstruktora dodele inicijalne vrednosti članovima objekta u samom trenutku kreiranja objekta

Konstruktor sa parametrima pomaže da se dodele inicijalne vrednosti članovima objekta u samom trenutku kreiranja objekta, kao što je pokazano sledećim primerom:

#include <iostream>
using namespace std;
class Line
{
   public:
    // ...
    Line(double len);  // Ovo je konstruktor
 
   private:
    double length;
};
 
// Konstruktor sa parametrima i ostale funkcije clanice
Line::Line( double len)
{
    cout << "Objekat kreiran, duzina = " << len << endl;
    length = len;
}
 
//...

Glavni program možemo napisati na sledeći način:

int main( )
{
   Line line(10.0);
 
   // dobavi (get) pocetno postavljenu duzinu.
   cout << "Duzina linije : " << line.getLength() << endl;
   // postavi novu duzinu linije
   line.setLength(6.0); 
   cout << "Duzina linije : " << line.getLength() << endl;
 
   return 0;
}

Rezultat programa će biti:

Objekat kreiran, duzina = 10
Duzina linije : 10
Duzina linije : 6
Korišćenje liste za inicijalizaciju
Lista za incizijalizaciju se ubacuje nakon parametara konstruktora, i znaka dvotačke (:), gde se navodi svaka pojedinačna vrednost za promenljive članice, koje su razdvojene znakom zarez (,)

C++ sadrži drugačiji način inicijalizacije članova objekata koji omogućava da se vrednosti članova objekta inicijalizuju u trenutku kreiranja. Ovo se ostvaruje korišćenjem liste za inicijalizaciju.

U slučaju konstruktora sa parametrima, moguće je koristiti sledeću sintaksu za inicijalizaciju polja, odnosno članova, objekata:

Line::Line( double len): length(len)
{
    cout << "Objekat kreiran, len = " << len << endl;
}

Prethodna sintaksa je identična sintaksi koja sledi:

Line::Line( double len)
{
    cout << "Objekat kreiran, len = " << len << endl;
    length = len;
}

Lista za inicijalizaciju se ubacuje odmah nakon navođenja parametara konstruktora, i znaka dvotačke (:), gde se navodi svaka pojedinačna vrednost za promenljive članice, koje su razdvojene znakom zarez.

Takođe treba naglasiti da se lista za inicijalizaciju ne završava znakom tačka-zarez.

Na sledećem linku je moguće pogledati primer upotrebe liste za inicijalizaciju: https://www.youtube.com/watch?v=53VYYMy-LBo

Destruktor
Destruktori su funkcije koje se pozivaju automatski pri prestanku postojanja objekta tj. pri njegovom destruktuiranju

Destruktori su funkcije koje se pozivaju automatski pri prestanku postojanja objekta tj. pri njegovom destruktuiranju.

U programu se destruktor funkcije lako uočavaju jer im ime počinje znakom "~" (tilda), a sledi naziv klase kojoj destruktor pripada:

ime_klase :: ~ime_klase ( parametri )
{
 // sadrzaj - programski kod funkcije
}

Destruktor se izvršava svaki put kada objekat klase za koju je definisan izlazi iz opsega važenja ili prilikom korišćenja operatora delete nad pokazivačem, koji pokazuje na objekat te klase (o pokazivačima na objekte će biti više reči u nekoj od narednih lekcija).

Upotreba destruktora
U programu se destruktor funkcije lako uočavaju jer im ime počinje znakom "~" (tilda), a sledi naziv klase kojoj destruktor pripada

Sledeći primer demonstrira koncept i primenu destruktora:

#include <iostream>
using namespace std;
 
class Line
{
   public:
    //...
    ~Line();  // Ovo je destruktor

   private:
    double length;
};
 
// ...
Line::~Line(void)
{
    cout << "Objekat se brise" << endl;
}

Glavni program možemo napisati na sledeći način:

int main( )
{
   Line line;
 
   // postavi duzinu linije
   line.setLength(6.0); 
   cout << "Duzina linije : " << line.getLength() <<endl;
 
   return 0;
}

Nakon izvršenja programa, dobićemo sledeći izlaz:

Objekat se kreira
Duzina linije : 6
Objekat se brise