Vandredni 4

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 6

Klase

Klase su, znai, novi, apstraktni, sloeni tip podataka koje kreira
sam programer po odreenim pravilima. Za takve tipove podataka
predvieno je da pored podataka (osnovnih i sloenih) sadre i f-je za
upravljanje podacima.
Elementi klase nazivaju se lanovima klase, a mogu biti podaci, koje
nazivamo podaci lanovi i f-je koje nazivamo f-je lanice (ili
metode).
lanovi klase mogu biti javni i privatni.
Pouzdanost programa obezbeujemo ograniavajui direktan pristup
podacima tako to ih stavljamo u privatan dio klase, ime postaju
privatni podaci klase koijma se pristupa preko posebnih f-ja iz
unutanjosti klase. Javnim lanovima moe se pristupati kako iz
unutranjosti, tako i izvan posmatrane klase.
Javni i privatni dijelovi klase razgraniavaju se slubenim
rijeima: private i public.
Opti oblik:
Primijer:
class ime_klase
class podaci
{
{
public:
private:
...javni clanovi
int a,b;
private:
public:
...privatni clanovi
float x,y;
};
void unos();
void ispis();
};
(x,y su javni podaci(samo primjer, ne stavljaju se javno), unos() i
pise() su javne funkcije, a a i b su privatni podaci)
Primjerci klase nazivaju se obijekti. Objekat novoga tipa definie se
kao i cjelobrojna promjenjiva(int x;):
Opti oblik:

tip_obijekta(klasa)

Primijer:

podaci

ime_obijekta ;

P;

(P je objekat klase podaci)


Vidljivim lanovima klase, u djelu programa koji nije dio klase,
pristupamo koristei operator taka(.)
Opti oblik:

ime_obijekta . ime_clana_klase ;

Primijer:

P . x=3;
P.y=4;
P.unos();
P . pise();

Operaciju tacka treba koristiti samo onda kada se lanovi klase


pozivaju iz f-ja koje nisu lanovi klase.

1. pod x.
- piseX( x) -
inic( x a) a
. -. : pod.
- inic 10. -
piseX.
#include<iostream.h>
class pod
{
double x;
public:
void piseX();
void inic(double a);
};
void pod::piseX()
{
cout<<x<<endl;
}

void pod::inic(double a)
{
x=a;
}
void main()
{
pod P;
P.inic(10);
P.piseX();
}

Prijateljske f-je i klase


Pored metoda klase koje mogu pristupiti privatnim podacima te klase,
mogue je neke f-je ili metode druge klase proglasiti prijateljskim. F-ju koja
ne pripada klasi stavljanjem slubene rijei friend ispred prototipa
proglaavamo prijateljskom za odgovarajuu klasu. Svejedno je da li e se
prijateljska f-ja biti deklarisana u javnom ili privatnom djelu te klase.
class tacka
{
...
friend double rastojanje (int x, int y);
...
};

//Ako f-ja nije clanica neke druge klase

Metoda (f-ja) jedne klase moe biti prijateljska drugoj klasi:


class tacka
{
...
friend double tacka2::rastojanje (int x, int y);
tacka2

//F-ja

rastojanje

...
};

Ako sve metode klase tacka2 proglaavamo prijateljskim:


class tacka
{
...
friend class tacka2;
...
};

Prijateljstvo u C++ nije uzajamno.

pripada

klasi

Konstruktori i destruktori
U C++ svi podaci (pa i objekti) moraju biti inicijalizovani prije njihovog
korienja. U klasama koje smo koristili to je obavljala f-ja inic. Konstruktor je
specijalna metoda (f-ja lanica) koja je lan klase i ima isto ime kao klasa. Od
obine f-je razlikuje se po tome to ne vraa vrijednost (ne navodi se tip koji
vraa, ak ni void). Ova metoda se poziva u momentu kada se kreira objekat,
tj. kada mu se dodijeli memorijski prostor. Klasa moe imati nekoliko
konstruktora.
Ako u klasi nije opisan ni jedan konstruktor, kompajler sam generie
podrazumijevajui konstruktor.
Pri uklanjanju objekta (oslobaa se i memorija koju zauzimaju podaci
lanovi) iz memorija i poziva se metoda koja se naziva destruktor. Destruktor
predstavlja metodu ije je ime isto kao ime klase, samo to se ispred imena
destruktora navodi znak tilda (~). Destruktor ne vraa vrijednost i ne moe
imati parametre.
Destruktor se uvijek poziva automatski kada prestaje biti aktivan blok u
kome je kreiran objekat.
1. pod x.
(inline, x a),
- koren ( x )
pod. -. :
pod 100. - koren
.
#include<iostream.h>
#include<math.h>
class pod
{
double x;
public:
friend void koren(pod A);
pod(double a)
{
x=a;
}

};
void koren(pod A)
{
cout<< sqrt(A.x)<<endl;
}
void main()
{
pod P(100);
koren(P);
}

()
+, -, ++ .


-.
,

x=y+z;
x, y, z ,
-
. - :
operator op;

//op +, -, ++,

- ()
-( , ).
: tacka x
- (= + )
-.
tacka tacka::operator +(tacka T)
{
tacka S;
S.x=x+T.x;
S.y=y+T.y;
}

tacka operator +(tacka T1, tacka


T2)
{
tacka S;
S.x=T1.x+T2.x;
S.y=T1.y+T2.y;
}
1. kombr x y. -
unos ( x y) -
ispis ( x y)
- + (kombr)
1 2 (kombr). - (
). .
, 1, 2 kombr, 1 - unos,
2 - unos, 1 2.
- ispis.
#include<stdio.h>
class kombr
{
double x,y;
public:
void unos()
{
printf("Unesi kompleksan
broj :\n");
scanf("%lf%lf",&x,&y);
}
void ispis()
{
printf("Rezultat je: %lf+j
%lf\n",x,y);
}
friend kombr operator +(kombr
B1,kombr B2);

};

kombr operator +(kombr B1,kombr


B2)

{
kombr t;
t.x=B1.x+B2.x;
t.y=B1.y+B2.y;
return t;

{
kombr K,K1,K2;
K1.unos();
K2.unos();
K=K1 + K2;
K.ispis();
}

}
void main ()

Naslijeivanje
Naslijeivanje omoguava stvaranje (kreiranje) vrlo sloenih klasa
(izvedenih) koje gradimo na osnovu ve gotovih klasa (osnovnih klasa,
koje su optije). Izvedene klase naslijeuju sve lanove svojih osnovnih klasa
(podatke i f-je). Ovim elementima dodajemo i lanove koji pripadaju
izvedenoj klasi. (Nove naslijeuju njihova svojstva i ponaanje uz dodavanje
novih osobina).
Npr. klasa oblik je optija klasa iz koje bi se, recimo, mogle izvesti klase krug i
pravougaonik,...

Postojanje osnovne klase oznaava se dvijema takama:


class krug:public tacka
{
....
};

Pored javnih i privatnih dijelova klase, kod naslijeivanja uveden je i


zatieni dio klase kome se moe pristupiti iz izvedenih klasa (zatieni dio
pristupa pripada osnovnoj klasi). Zatieni dio se obiljeava slubenom
rijeju protected.
class UcenikTehSkole:public Ucenik
{
....
};

Konstruktori i destruktori se ne naslijeuju. Kao to i dijelovi klase mogu biti


privatni, zatieni i javni, tako i naini naslijeivanja mogu biti: privatni,
zatieni i javni. Najei je javni nain izvoenja.
Ukoliko je klasa izvedena iz vie klasa govori se o viestrukom
naslijeivanju. U tom sluaju osnovne klase odvajamo zarezima.
class UcenikTehSkole:public Ucenik,public Tinejdzer
{
....
};

1. tacka (x,y)
- inic ( ) pise ( )
. podaci
tacka - pomera ( 2)
.
podaci, - inic, pomera, pise.

class tacka
{
protected:
int x,y;
public:
void inic()
{
cin>>x>>y;
}
void ispis()
{
cout<<x<<y;
}
};

class podaci:public tacka


{
public:
void pomera()
{
x=x+2;
y=y+2;
}
};
void main()
{
podaci P;
P.inic();
P.pomera();
P.ispis();
}

You might also like