Professional Documents
Culture Documents
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
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
Veleuilite u Rijeci
class
private
nevidljivo iz dijelova
atributi
programa van klase metode
public
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
Veleuilite u Rijeci
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
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
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:
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
mr.11/12/16
sc. Jasminka Tomljanovi, vii predava
15
Veleuilite u Rijeci
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
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