Professional Documents
Culture Documents
03 Konstruktori I Destruktori
03 Konstruktori I Destruktori
Objektno-orijentisano
programiranje
1. Konstruktori
2. Destruktori
3. Poziv konstruktora i destruktora
4. Prijateljske funkcije i klase
Konstruktori
Specijalne funkcije članice klase
Inicijalizuju atribute klase
Isto ime kao i ime klase
Nemaju povratni tip
1
11/1/2017
Implementacija konstruktora
//A.h
class A
{
public:
A();
A(int,float);
…
};
//A.cpp
A::A()
: <inicijalizacija>
{
<telo>
}
public:
Time(); //default constructor
Time( int, int, int ); // set hour, minute, second
...
private:
int hour;
int minute;
int second;
};
2
11/1/2017
ili: ili:
Poziv konstruktora
3
11/1/2017
4
11/1/2017
Inicijalizacija konstanti
//Krug.h //Krug.cpp
class Krug Krug::Krug()
{ : pi(3.14f)
public: {
Krug(); r = 0;
Krug( float r ); }
…
private: Krug::Krug(float r)
float r; : pi(3.14f)
const float pi; {
}; this->r = r;
}
5
11/1/2017
Destruktori
Nemaju argumente
Ne mogu biti overloadovani (preklopljeni)
Automatski se pozivaju pri uklanjanju objekta iz memorije
Zadatak destruktora
Da izbrišu sve atribute kreirane u dinamičkoj zoni memorije.
Primer destruktora
//Vector.h //Vector.cpp
class Vector Vector::~Vector()
{ {
public: delete [] a;
Vector(); }
Vector( int k );
~Vector();
…
private:
int n;
int* a;
};
6
11/1/2017
Konstruktori za kopiranje
7
11/1/2017
Eksplicitno:
Vector v1(20);
…
Vector v2(v1);
Vector v3=v1;
Implicitno:
Pri prenosu parametara po vrednosti,
Pri vraćanju rezultata funkcije po vrednosti.
Ukoliko konstruktor za kopiranje ne postoji, kopija se pravi tako što se
svi atributi objekta koji se kopira jednostavno prepišu u objekat u koji
se kopira.
Problem nastaje ako objekat sadrži podatke u dinamičkoj zoni memorije.
Pitanja
8
11/1/2017
Zadatak:
Na programskom jeziku C++ kreirati klasu Krug koja ima privatni
atribut poluprečnik i statičku konstantu Pi. Javne metode klase krug
su:
konstruktor koji inicijalizuje dužinu poluprečnika,
funkcija za izračunavanje obima,
funkcija za izračunavanje površine.
Kreirati i klasu Valjak čiji su privatni atributi:
osnova valjka – objekat klase krug,
visina valjka.
U javnom delu klase Valjak definisati:
konsturktor koji inicijalizuje poluprečnik osnove i visinu valjka,
metoda za izračunavanje površine valjka,
metoda za izračunavanje zapremine.
U funkciji main kreirati 2 objekta klase Valjak (jedan u statičkoj, a
drugi u dinamičkoj zoni memorije). Poluprečnike osnova i visine
učitati sa standardnog ulaza. Na standardni izlaz prikazati površine i
zapremine oba tela.
9
11/1/2017
10
11/1/2017
Prijatelji klasa
Prijateljske funkcije
Prijateljske funkcije su funkcije koje nisu članice klase koje mogu da
pristupju privatnim članova klase.
Prijateljske funkcije mogu da budu:
globalne funkcije ili
članice drugih klasa.
Funkcija je prijateljska ako se u definiciji klase navede deklaracija
funkcije sa ključnom reči friend ispred.
Nevažno je da li se deklaracija prijateljske funkcije navodi u
privatnom ili javnom delu klase.
Prijateljska funkcija nema pokazivač this na objekat klase kojoj je
prijatelj.
Funkcija može da bude prijatelj većem broju klasa istovremeno.
11
11/1/2017
Prijateljske klase
Ako su sve metode klase Y prijateljske funkcije klasi X,
onda je Y prijateljska klasa (friend class) klasi X
class X
{
friend Y; //ako je klasa Y definisana ili deklarisana
friend class Z; //ako Z jos nije ni def.ni dek.
...
};
Sve metode klase Y mogu da pristupaju privatnim
članovima klase X.
Prijateljske klase se koriste kada neke dve klase imaju
tešnje međusobne veze .
12
11/1/2017
Zadatak 2.
Na programskom jeziku C++ napraviti aplikaciju koja vrši
obradu podataka sa prijemnog ispita na na jednom
fakultetu. U tu svrhu kreirati klasu Student koja kao
privatne atribute ima:
ime – maksimalne dužine 10 karaktera,
prezime – maksimalne dužine 10 karaktera i
broj bodova.
Zadatak 2.
Kreirati i klasu PrijemniIspit čiji su privatni atributi:
broj prijavljenih kandidata,
niz podataka o prijavljenim kandidatima zapamćen u dinamičkoj zoni
memorije,
maksimalni broj kandidata koje fakultet moze da upise,
prag prolaznosti - minimalni broj bodova koje student treba da ima da bi bio
upisan,
U javnom delu klase definisati:
konstruktor koji postavlja broj prijavljenih kandidata, broj kandidata koje
fakultet prima i prag prolaznosti,
destruktor,
funkciju koja sa standardnog ulaza ucitava podatke o prijavljenim
kandidatima,
funkciju koja na standardni izlaz prikazuje listu primljenih kandidata uredjenu
u nerastućem redosledu prema broju bodova (u ovoj funkciji koristiti
privatnu funkciju za uredjivanje liste kandidata po navedenom kriterijumu).
U funkciji main učitati sve podatke o prijemnom ispitu sa standardnog
ulaza i na standardni izlaz prikazati rang listu primljenih kandidata.
13