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.
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 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
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
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).
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