You are on page 1of 24

Veleuilite u Rijeci

C++
mr. sc. Jasminka Tomljanovi, vii predava

Veleuilite u Rijeci

Sadraj
Klase i objekti
Konstruktori i destruktori

mr.11/12/16
sc. Jasminka Tomljanovi, vii predava

Veleuilite u Rijeci

Osnovni pojmovi OOP


klasa predstavlja tip
objekt prestavlja instancu tipa
klasa definira svoje lanove
lanovi klase su:
atributi (podatkovni lanovi)
metode (funkcijski lanovi)

mr.11/12/16
sc. Jasminka Tomljanovi, vii predava

Veleuilite u Rijeci

Deklaracija klase
deklaracija struct naslijeena je iz C-a i
definira iskljuivo atribute
deklaracija class u C++ definira
atribute i metode (potpune
objekte)
deklaracija class uvodi specifikatore
pristupa koji odreuju prava pristupa
lanovima klase a to su:
public
protected
11/12/16

mr. sc. Jasminka Tomljanovi, vii predava

Veleuilite u Rijeci

class
private

nevidljivo iz dijelova
atributi
programa van klase metode
public

vidljivo iz dijelova atributi


programa van klase metode

mr.11/12/16
sc. Jasminka Tomljanovi, vii predava

Veleuilite u Rijeci

Primjer klase
class pravokutnik {
public: int x1,y1,x2,y2; //javni lanovi klase dostupni
izvan klase
private: int sirina, visina; //privatni lanovi dostupni
unutar klase
public:
int povrsina (){ //javni lan klase
visina = y2 y1;
//pristup privatnim lanovima
klase
sirina = x2 x1;
return sirina * visina;
} //povrsina
}; //pravokutnik
mr.11/12/16
sc. Jasminka Tomljanovi, vii predava

Veleuilite u Rijeci

o1.x1=5; o1.y1=5; o1.x2=15; o1.y2=10; // javni lanovi


objekta o1
cout << "Povrsina pravokutnika o1: " << o1.povrsina()
<< endl;
o2.x1=10;o2.y1=10;o2.x2=15;o2.y2=25; // javni lanovi
objekta o2
cout << "Povrsina pravokutnika o2: " << o2.povrsina()
<< endl;
kvadrat=new pravokutnik; // dinamika alokacija
objekta
kvadrat->x1=6;kvadrat->y1=6;kvadrat>x2=10;kvadrat->y2=10;
cout << "Povrsina kvadrata: " << kvadrat->povrsina()
<< endl;
7
mr.11/12/16
sc. Jasminkakvadrat;
Tomljanovi, vii
delete
//predava
dealokacija objekta

Veleuilite u Rijeci

Unutarnji i vanjski pristup lanovima


klase
unutarnji (privatni) je pristup lanovima
klase iz metoda klase gdje su definirani i mogu
je za sva tri specifikatora pristupa

vanjski (javni) je pristup lanovima klase


izvan klase i mogu je samo za specifikator

public
zatieni pristup protected lanovima klase
znai pravo pristupa lanovima klase iz metoda
klase gdje su definirani i iz metoda podreenih
klasa tj. klasa koje nasljeuju odgovarajue
8
mr.11/12/16
sc.
Jasminka Tomljanovi, vii predava
lanove

Veleuilite u Rijeci

Atributi i metode
atributi pripadaju objektima iz svojih
klasa fiziki

metode pripadaju objektima iz svojih


klasa samo logii
Svaki objekt iz klase sadri svoje
vlastite podatke, a svi objekti iz iste
klase koriste iste metode
mr.11/12/16
sc. Jasminka Tomljanovi, vii predava

Veleuilite u Rijeci

class klasa{
public: int atribut;
void metoda(){
cout << "metoda" << endl;
} //metoda
}; //klasa
klasa objekt1,objekt2;
int main(){
cout << sizeof(objekt1) << endl; // 4 ( =sizeof(int) )
objekt1.atribut=11;
memcpy (&objekt2,&objekt1,sizeof(klasa)); //kopiranje
objekta
cout << objekt2.atribut << endl;
return 1;
}
//mainTomljanovi, vii predava
10
mr.11/12/16
sc. Jasminka

Veleuilite u Rijeci

Javno suelje klase i implementacija


klase
javno suelje klase ine svi njeni
lanovi s javnim pristupom (public) i

preko javnog suelja objekti


komuniciraju s okolinom
implementaciju klase ine javno
suelje klase i lanovi koji nisu vidljivi
izvana klase tj. oni koji imaju privatni ili
zatieni pristup
predstavlja nain na koji se reprezantacija
objekta ostvaruje
mr.11/12/16
sc. Jasminka Tomljanovi, vii predava
vrijedi princip skrivanja podataka jer nisu11

Veleuilite u Rijeci

Enkapsulacija
enkapsulacija predstavlja
objedinjavanje javnog suelja i
implementacije (odnosno svih lanova
klase) u cjelinu
prema principu enkapsulacije metode
su logiki pridruene
podatkovnom sadraju objekata
p1.povrsina() : metoda povrsina
koristi podatkovni sadraj objekta p1
mr. sc. Jasminka
Tomljanovi,
vii predava
(x1,
y1 ,x2,
y1, sirina i visina; fiziki
11/12/16

12

Veleuilite u Rijeci

Pokaziva this
iz jedne klase mogue je definirati
neogranien broj objekata
klasa ne zna nazive svojih objekata
pomou pokazivaa this mogue je
unutar klase doznati adresu objekta,
odnosno:

*this predstavlja sam taj objekt na


nain kako je dostupan iz koda klase
u veini sluajeva nije neophodno
mr. sc. Jasminka Tomljanovi, vii predava
navoditi pokaziva this: this -> x
11/12/16

13

Veleuilite u Rijeci

class klasa{
public: int a,b;
void metoda(){
cout << "Adresa objekta preko kojeg je metoda
pozvana:"<<(int)this <<endl;
cout<<"Vrijednosti atributa su: "<<this->a<<" i
"<<this->b<< endl;
} //metoda
}; //klasa
klasa objekt1,objekt2;
void main(){
objekt1.a=11; objekt1.b=15;
cout << "Adresa objekta objekt1: " << (int)&objekt1 <<
endl;
objekt1.metoda();
objekt2.a=22; objekt2.b=25;
cout << "Adresa objekta objekt2: " << (int)&objekt2 <<
14
mr.11/12/16
sc. Jasminka Tomljanovi, vii predava
endl;

Veleuilite u Rijeci

Operator

::

Operator

::

naziva se operator

dodjele podruja ili operator


pripadnosti
pripadnost se odnosi na klasu ili
podruje imena (namespace)

mr.11/12/16
sc. Jasminka Tomljanovi, vii predava

15

Veleuilite u Rijeci

Operator :: moe se koristiti za


definiciju metoda izvan tijela klase
pristup drugim podrujima imena
(namespace)
pristup statikim lanovima klasa
statiki lanovi klasa ne pripadaju
svakom objektu pojedinano, nego im
je pristup mogu preko svih objekata
klase
pristup lanovima pobrojenja
deklariranim
unutar
klasa
11/12/16
16

mr. sc. Jasminka Tomljanovi, vii predava

Veleuilite u Rijeci

#includestdafx.h
#include<iostream>
int a; // globalna varijabla a
class klasa{
public: int a,b;
static int c; // vrijednost c se dijeli izmeu svih objekata
klase
enum {pon,uto,sri,cet,pet,sub,ned}; // pobrojenje
void metoda(); //prototip metode
}; //klasa
void klasa::metoda(){ //metoda pripada klasi klasa
std::cout << "Metoda izvan tijela klase" << std::endl;
} //metoda
klasa objekt1,objekt2;
int
klasa::c=5;
//ne
pripada svakom objektu pojedinano
17
mr.11/12/16
sc. Jasminka
Tomljanovi,
vii predava

Veleuilite u Rijeci

int main(){
objekt1.metoda(); // kod poziva nema razlike
char a; // lokalna varijabla a koja prekriva istoimenu
globalnu var.
a = 'A'; // podrazumijeva se lokalna varijabla
::a=11; // ovo je globalna varijabla a
std::cout << klasa::ned << std::endl; //pristup lanu
pobrojenja
std::cout << klasa::c << std::endl;
klasa::c=22;
std::cout << objekt1.c << std::endl;
std::cout << objekt2.c << std::endl;
} //main
mr.11/12/16
sc. Jasminka Tomljanovi, vii predava

18

Veleuilite u Rijeci

Objektna dekompozicija
programa
Objektna dekompozicija programa
dijeli podatke, kojima se logiki
pridruuju potprogrami koji rade s
tim podacima
takva integracija podataka (atributa)
i potprograma za obradu (metoda)
definirana je odgovarajuom klasom
(princip enkapsulacije)
objekti iz zadane klase mogu se
neogranieno multiplicirati i
mr. sc. Jasminka
Tomljanovi, vii predava
pridruivati
stvarnim objektima
11/12/16

19

Veleuilite u Rijeci

podatkovni kontekst objekata su svi


njegovi atributi i ostaje sauvan do
dealokacije objekta i nema potrebe pri
svakom pristupanju objektu prenositi mu
cijeli podatkovni kontekst
osnovni princip je da se procesi
pridruuju podacima tj. podatkovni
kontekst objekta postoji od alokacije
objekta i samo mu se po potrebi
mijenjaju pojedini dijelovi
princip skrivanja podataka (odvajanja
mr. sc.suelja
Jasminka Tomljanovi,
predava
od vii
implementacije)
11/12/16

20

Veleuilite u Rijeci

Konstruktor
konstruktor je metoda koja ima isto
ime kao i klasa, a poziva se automatski
kod alokacije objekta. Specifinosti
konstruktora u odnosu na ostale
metode:
konstruktor nema definiran tip (ne vraa
vrijednost)
konstruktor se ne nasljeuje
moe postojati vie konstruktora za istu
klasu (tj. moe se preopteretiti)

mr.11/12/16
sc. Jasminka Tomljanovi, vii predava

21

Veleuilite u Rijeci

Destruktor
destruktor ima isto ime kao i klasa
samo to ispred imena klase dolazi znak
~ (tilda). Poziva se automatski kod
dealokacije objekta. Specifinosti
destruktora u odnosu na ostale metode:
Destruktor nema argumenata
Destruktor (isto kao i konstruktor) nema tip,
ne vraa vrijednost i ne nasljeuje se

mr.11/12/16
sc. Jasminka Tomljanovi, vii predava

22

Veleuilite u Rijeci

class pravokutnik {
public: int x1,y1,x2,y2;
private: int sirina, visina;
public:
pravokutnik(){ //konstruktor 1
cout << "Kostruktor (bez argumenata)!" <<
endl; };
pravokutnik(int x1_,int y1_,int x2_,int y2_){
//konstruktor 2
cout << "Konstruktor (s argumentima):" << endl;
x1=x1_;y1=y1_;x2=x2_;y2=y2_; };
~pravokutnik(){ //destruktor
cout << "Destruktor!" << endl;
}; //~pravokutnik
int povrsina (){ //povrsina
visina = y2 - y1;
sirina = x2 - x1;
23
return
sirina
visina;}; //povrsina
mr.11/12/16
sc. Jasminka
Tomljanovi,
vii *
predava

Veleuilite u Rijeci

pravokutnik p2,*objekt;
int main(){
objekt = new pravokutnik; //alokacija objekta
delete objekt; //dealokacija objekta
pravokutnik p2(50,50,100,150); //pokree 2. konstruktor
cout << "Povrsina p2=" << p2.povrsina() << endl;
objekt = new pravokutnik(20,20,50,60); //alokacija
objekta
cout << "Povrsina objekta=" << objekt->povrsina() <<
endl;
delete objekt; //dealokacija objekta
}

mr.11/12/16
sc. Jasminka Tomljanovi, vii predava

24

You might also like