You are on page 1of 14

KLASA

Kada budete razvijali sopstvene klase postavljacete sebi mnogo pitanja. Da li mi je potrebno mnogo
kopija konstruktora? Da li mi je neophodan podrazumevani argument u mojim konstruktorima? Kako da
obezbedim konverziju tipa za moju klasu? Da li mi je potreban operator jednakosti?Kako da
implementiram postfiksni operator?

KLASA u jeziku C++

U jeziku c++ klasa predstavlja tip podataka. Deklarisanjem klase definisete novi tip. Klasa predstavlja
strukturu koju su grupisani podaci I funkcije. Definicija klase se sastoji u navodjenjem svih clanova klase.

Namena

Definisite korisnicki tip ili klasu koja moze sadrzati I promenljive I funkcije

Sintaksa

Class ime[:deklaracija_osnovne_klase] moze bez

{deklaracija

Public:deklaracija

Protected:deklaracija

Private:deklaracija

} [definicije_objekta]; moze bez

Uglaste zagrade pokazuju das u deklaracije osnovne klase I definicije objekta opcioni. Objekti jesu
pojedinacne pojave (instance) klase.Deklaracija osnovne klase se koristi u slucaju kada se definise klasa
nasledjivanja podakata I metoda te klase. Efekat kljucne reci class je isti kao unika rezervvisane reci
struct, izuzev sto je pristup clanovima klase podrazumeva privatan. Unutar neke od deklaracija mogu
biti deklracije promeljenljivih kao I /ili deklaracija funkcija. Podaci koji su deo klase nazivaju se podaci
clanovi klase (data members). Funkcija koje su deo klase nazivaju se funkcije clanice klase (memer
functions) ili metodi klase.

Deklarisanje klase
Da biste deklarisali klasu, upotrebite kljucnu rec class, pracenu imenom klase I otvorenom velikom
zagradom. Izmedju velikih zagrada se navodi lista podataka clanova I metoda klase. Zavrsite deklraciju
zatvarajucom zagradom I znakom tacka-zarez. Evo deklaracije klase koja je nazvana Cat

Class Cat

{unsigned int starost;

Unsigned int tezina;

Void Miau();

}; moze I bez ovog ; zato sto je deklarisano u prethodnom redu ili () tacka zarez

Deklaracija ove klase ne alocira memoriju za klasu Cat. Ono samo saopstava kompajleru strukturu klase
Cat:podatke koje sadrzi (starost I tezina ) I metode klase (funkcija Miau ()). Ova deklaracija takodje
saopstava kompajleru koliko memorijskog prostora kompajler mora da rezervise za svaki objekat klase
Cat koji se kreira. U ovom primeru, ako celobrojna vrednost zahteva 2 bajta, klasa Cat zauzima samo 4
bajta: polje starost zauzima dva bajta, dok polje tezina zahteva druga 2 bajta. Funcija Miau()ne zauzima

Prostor, je se za funcije clanice (metode) ne rezervise memorijski proctor.

U c++ u definisanje klasa sliucno je definisanju struktura u programskom jeziku C, a s tim da je kljucna
rec class, ne struct. U klasama je takodje potrebno zadati promenljive koje ce biti dostupne u celom
program. Takve promenljive zovemo javne I u C++ se zapisuju sa public.

Primer 1: u ovom primeru je kreirana klasa koja se zove Primer I koja sadrzi funkciju Ispis().

Funkcija Ipis() ispisuje tekst “ispis teksta na racunaru koriscenjem klase Ispis”

#include<iostream>

Using namespace std;

Class Primer /* deklracija klase koja se zove Primer I koja u sebi sadrzi funkciju Ispis()*/

Public:

Void Ispis()

Cout<<”Ispis teksta na racunaru koriscenjem klase Ispis\ n”<<endl;

};
Int main()

Primer test; /* deklaracija objekta imena test prema*/

Test.Ispis(); /* poziv funkcije Ispis() nad objektom test*/

System (“PAUSE”);

Return 0;

Pojam klase

Mehanizam klasa omogucuje korisnicima da definisu sopstvene tipove podataka. Zbog toga se klase
cesto nazivaju I korisnicki definisani tipovi podataka. Klase se koriste kao sablon kojim se modeliraju
objekti slicnih svojstava, a objekti su konkretni primerci (instance) klase. Uocavanjem zajednickih
osobina (svojstava) objekata I njihovog grupisanja u klasu naziva se apstrakcija. Klasa sadrzi podatke
clanove (member data)I funkcije clanice ili metode (member functions). Podaci clanovi najcesce
predtavljaju unutrasnjost klase, tj. Njenu realizaciju, a funkcije clanice njen interfejs, odnosno ono sto se
moze raditi sa njenim objektima.

Klasa se deklarise pomocu kljucne reci class. Opsti oblik deklaracije klase je;

Class ime {lista clanova} lista objekata;

Ime klase postaje novi tip koji se moze koristiti za kjreiranje objekata klase (odnosno promenljivih koje
su tipa te klase). Iza deklracije klase mogu se navesti nazivi objekata, ali to nije obevezno. Klasa moze da
sadrzi private I javne clanove l standradno su svi clanovi klase privatni. To znaci d aim mogu pristupati
iskljucivo drugi clanovi iste klase. Na taj nacin postize se OO princip kapsuliranja ili skrivanja podataka.
Da bi se delovi klase ucinili javnim, tj. Da bi se omogucio pristup iz drugih delova programa, oni se
moraju deklarisati kao javni pomocu kljucne reci public. Klase se po pravilu projektuju tako da su podaci
clanovi privatni, a funkcije clanice javne.

Iako nema sintaksnog pravila koje to nalaze, dobro projektovana klasa trebalo bi da definise samo jednu
logicku celinu. Npr, u klasi koja cuva imena I telefonske brojeve ne bi trebalo da se nadju I informacije o
berzi, broju suncanih sati u godini, niti bilo sta drugo. Dobro projektovane klase grupisu logicki povezane
informacije.

Da ponovimo: u jeziku C++, klasa kreira nov tip podataka koji se moze koristiti za kreiranje objekata.
Klasa je logicki okvir koji definice vezu izmedju svojih clanova. Kada se deklarise promenljiva tipa klase,
zapravo se kreira objekat te klase I za njega se odvaja proctor u memorji.
Kao primer proucicemo klasu koja cuva informacije o vozilima , kao sto su automobili,kombiji I kamioni.
Tu klasu nazvacemo Vozil I u nju cemo smesti 3 podatka o vozilu: broj mesta za putnike, kapacitet
rezervoara za gorivo I prisecnu potrosnju goriva.

Pojam klase

Class Vozilo{

public:

int brojMesta;//broj mesta za sedenje

int kapacitetRezervoara;//kapacitet rezervora u litrama

int potrosnja;//prosecna potrosnja u litrama na 100km

};

Klasa Vozilo ima 3 podatka clana: putnici,rezervoar I potrosnja. Klasa Vozilo za sada nema funkcija
clanica; njih cemo dodati kasnije.

Opsti oblik deklarisanja podataka clanova u klasi je:

Tip promenljiva;

Dakle, podaci clanovi deklarisu se na slican nacin kao “obicne” promenljive. U klasi Vozilo ipsred svih
podataka clanova nalazi se specifikator javnog pristupa (public). To omogucuje d aim se pristupa iz koda
koji se nalazi izvan klase Vozilo. Definicja Klase kreira nov tip podataka, koji se u ovom slucaju zove
Vozilo. To ime se moze koristi za deklarisanje promenljivih tipa Vozilo, sto su zapravo objekti klase
Vozilo. Zapamtite da je deklaracija klase samo opis tipa I njome se ne prave stvarni objekat. Zbog toga
prethodna deklracija ne kreira nikakve objekte tipa Vozilo. Da bi se kreirao objekat. Zbog toga prethodna
deklracija ne kreira nikakve objekte tipa Vozilo. Da bi se kreirao objekat Vozilo, treba upotrebiti naredbu
za deklraciju sledeceg oblika:

Vozilo kombi;//kreira objekta klase Vozilo koji se zove kombi.

Kreiranje objekata klase ponekad se zove I instanciranje klase. Kada se izvrsi ova naredba, kombi ce
postati primerak (objekat) klase Vozilo. Kad god se kreira primerak klase, kreira se objekat koji sadrzi
sopstvenu kopiju podataka clanova klase. To znaci da ce svaki objekat Klase imati svoje kopije
promenljivih (podataka clanova) putnici, rezervoar I potrosnja.

Operator tacka povezuje ime objekta sa njegovim podacima clanovima. Opsti oblik operatora tacka je:

Objekat.clan

Objekat se zadaje sa leve strane, a podatak clan sa desne. Npr, da bi se podatku clanu gorivo kombi
dodelila vrednost 50, koristi se sledeca naredba:
Kombi.gorivo = 50;

Operator tacka u opstem slucaju koristi se za pristup podacima clanovima I funkcijama clanicama klase.
Evo primera program koji koristi klasu Vozilo:

class Vozilo {

public:

int brojMesta;

int kapacitetRezervoara;

int potrosnja;

};

Int main (){

Vozilo kombi;

Vozilo automobile;

Double kilometrazaKombi, kilometrazaAuto;

//dodela vrednosti podacima clanovima objekta kombi

kombi.brojMesta=7;

kombi.kapacitetRezerboara=60;

kombi.potrosnja=7;

//dodela vrednosti podacima clanovima objekta automobile

automobil.brojMesta=5;

automobil. kapacitetRezerboara=50;

automobi. potrosnja=5;

autonomijaKombi=kombi.kapacitetRezervoara/

kombi.potrosnja*100;

autonomijaAuto=automobil.kapacitet Rezervoara

automobil.potrosnja *100;
Cout<<”U kombi staje “<<kombi.brojMesta<<”putnika I s apunim rezervoarom
prelazi”<<autonomijaKombi<<”kilometara.”<<endl;

Cout<<”U automobil staje “<<automobil.brojMesta<<”putnika I s apunim rezervoarom


prelazi”<<autonomijaAuto<<”kilometara.”<<endl;

Return 0;

Rezultat izvrsavanja :

U kombi staje 7 putnika I sa punim rezervoarom prelazi 800km

U auto staje 5 putnika I sa punim rezervoarom prelazi 1000km

Vecina klasa osim podataka clanova ima I funkcije clanice. U opstem slucaju, funkcije clanice rade sa
podacima clanovima I komuniciraju sa drugim delovima programa. Funkcija main() u prethodnom
primeru racunala je autonomiju vozilo tako sto je kapacitet rezervoara delila potrosnjom. To je zadatak
koji tipicno treba da obavlja funkcija clanica klase, koju cemo sada dodati u klasu Vozilo zdavanjem
njenog prototipa u deklaraciji;

class Vozilo {

public:

int brojMesta;

int kapacitetRezervoara;

int potrosnjal

int autonomija();//funkcija clanica klase

};

Posto se u deklraciji klase navodi samo prototip funkcije clanice, a ne I njena implementacija, na mestu
gde se pise implementacija funkcije clanice mora se navesti kojoj klasi ona pripada.Za tu svrhu se koristi
operator razresenja dosega(::);

//implementacija funkcije clanice autonomija

Int Vozilo::autonomija(){

Return kapacitetRezervoara/potrosnja*100;

};
Operator razresenja dosega:: povezuje ime klase sa nazivom njene funkcije clanice da bi kompajler znao
na koju klasu se odnosi funkcija clanica. Posto vise razlicitih klasa mogu da imaju funkcije clanice istog
imena,operator:: je neophodan prilikom implementacije funkcije clanice. U ovom slucaju, operator
razresavanja dosega povezuje funkciju autonomija() sa klasom vozilo, odnosno deklarise da je funkcija
autonomija() u dosegu klase Vozilo, odnosno deklarise da je funkcija autonomija() u dosegu klase Vozilo.
Telo funkcije autonomija ima samo jednu naredbu; posto svaki objekta tipa Vozilo ima sopstevnu
vrednost podataka clanova kapacitetRezervoara I potrosnja, izracunava ce se autonomija za svaki
objektak posebno.

Primetite da je sintaksa definije funkcije clanice takva da se prvo navodi njen povratni tip.

Unutar funkcije autonomija() podacima clanovima kapacitetRezervoara I potrosnja pristupa se direktno,


bez navodjenja imena objekta ili tacke. Kada funkcija clanive koristi podatak clan svoje klase, ona to radi
bez eksplicitnog poziva na neki objekat svoje klase, pa nema potrebe da se objekat ponovo navodi.

Postoje dva nacina pozivanja funkcije clanice. Akose ona poziva iz koda koji se nalazi izvan klase, mora
se pozivati preko nekog objekta I operatora tacka

Kombi.autonomija();

Kada se pozove na ovaj nacin, funkcija autonomija() radi sa vrednostima podataka clanova objekta
kombi. Drugi nacin pozivanja funkcije clanice je iz druge funkcije clanice iste klase. Kada jedna funkcija
clanice klase poziva drugu funkciju clanicu klase to moze da uradi direktno, bez operatora tacka, jer
kompajler vec zna sa kojim objektnom radi.

Implementacija(korisnicki definisanih podataka) pomocu klase

Klasa omogucava da se modeluje objekta koji ima:

Attribute(podaci clanice-data members)

Ponasanje ili operacije(funkcije clanice-member functions)

Funkcije clanice se u nekim drugim OO programskim jezima zovu metode. Metode se izvsavaju kao
odgovor na poruke (messages) koje se salju njekom objektu. Poruka je, u sustini,poziv funkcije, clanice
od strane nekog objekta.

NAJVEZNIJE KARAKTERISTIKE KLASE KAO PRAVOG TIPA:

-ODREDJUJU MOGUCE CREDNOSTI OBJEKATA

-ODREDJUJU MOGUCE OPERACIJE NA OBJEKTIMA

-SPRECAVAJU IZVRSAVANJE BILO KOJE DRUGE OPERACIJE NAD OBJEKTIMA,

-OBEZBEDJUJU OBAVEZNU INICIJALIZACIJU OBJEKATA PRI NJIHOVOM STVARANJU


-OBEZBEJUJE UNISTVANJE OBJEKATA KADA VISE NISU POTREBNI

Primer:

Class Time{

Public:

Time ();

Void setTime (int,int,int);

Void printMilitarty();

Void printStandard();

Private :

Int sat;//0-23

Int min //0-59

Int sek; //0-59

Specifikatori mogu da menjaju mesta, mogu vise puta da se navode

U prethnodnom primetru imaju 4 javne funkcije (Time,set Time, printMilitarty, printStandard). To su


javne funkcije clanice ili javne usluge ili javne opracije (ponasanja) koje ce koristiti klijenti klase. Dakle,
javne funkcije clanice pruzaju neku uslugu klijentima klase, tacnije-funkcije clanice neke metode
omogucavaju inteakciju objektima klase.

U prethodnom primeru postoji funkcija clanica sa istim imenom kai I sama klasa.Ta funcija clanica
naziva se konstruktor.

Konstruktor je specijalna funkcija clanica koja automaski poziva prilikom kreirnaja objekta I sluzi da bi se
inicijalozvali podaci clanice prilikom reiranja tog objekta. Moguce je da se klasa ima vise konstruktiora
(preklapanje imena funcija). Konstruktor ne vraca nikakav tip (cak ni void!)

Zivotni vek OBJEKATa

Objekti se uvoide u program preko deklracija. U nekim slucajevima, kompajler moze da generise kod koji
kreira objekte za sopstvene potrebe. Objektima se dodeljuje ime (naziv) prilikom deklarisanja.
Imenovani objekti mogu se koristiti samo u oblastima vazenja (engl. Scopes;opseg vidljivosti) u kojima su
definisani. Objekti se mogu koristiti samo unutar oblasti u kojima su definisani.

Postoje tri vrste oblasti vazenja:lokalna oblast (eng local scope), koja obuhvata objekte definisane u
blokovima koda; oblast fajla (file scope), koja obuhvata objekte u fajlu, ali izvan svih blokova I klasa; I
oblast klase (class scope ), koja obuhvata objekte deklarisane kao podatke clanove klase. Objekti oblasti
fajla smatra se das u globalni.

Zivotni vek nekog objekta odredjen je njegovom klasom memorisanja (storage class)

 Automatski. Objekti deklarisani unutar bloka smatra se das u automatski. Automatski objekti se
kreiraju I inicijalizuju svaki put kada kontrola toga dostigne svoju definiciju a unistavaju po
izlasku iz bloka
 Staticki. Objekti sa prefiksom static su staticki I postoje I zadrzavaju svoje vrednosti u toku celog
izvrsavanja programa. Glovalni objekti su takodje staticni. Staticni objekti se kreiraju I inicijaliziju
pre prvog koriscenja bilo koje funkcije u konkretnoj translacionoj jedinici. Podrazume se das u
staticki objekti automastki inicijalizju na nulu.

Objekat u sirem smislu je definisano podrucje u memoriji podataka, u toku izvrsavanja programa.

Objekat moze biti:

 Promenljiva (globalna ili lokalna),


 Privremeni objekat koji se kreira pri izracunavanju izraza,
 Memoriska lokacija na koju pokazuju neki pokazivac
 Samo nekonstantni objekat se u jeziku c++ naziva promenljivom
 Ivrednost(Ivalue) je izraz koji upucuje na objekat ili funkciju
 Ivalue je kovanica od “nesto sto moze da stoji sa leve strane znaka dodele vrednosti”
 Ipak, ne mogu sve Ivrednosti da stoje sa leve strane znaka =, vec samo promenlji ve Ivrednosti.
 Promenljiva Ivrednosti (modifiable ivalue) je ona Ivrednost, koja nije ime funkcije, ime nizam, ni
konstanti objekta.
 Za svaki operator se definise da li zahteva kao operand Ivrednosti, I dali vraca Ivrednost kao rezultat
 Operanti unarni operatora &,++ i--, kao I operandi svih operatora dodele, moraju da budu Ivrednosti

Primet koji nema upotrebnu vrednost fali ovde


C++ obezbedjuje mehanizme za osiguravanje da se vasi objekti odgovarajuce inicijalizuju pre nego sto se
koriste. Kako vasi objekti ulaze u izlaze iz oblasti vazenja, memorija se alocira/dealocira
(rezervise/oslobadja) za njih a zatim se ta memorija inicijalizuje. C++ obezbedjuje specijalnu funkciju
clanicu za inicijalizaciju objekta koja se naziva konstruktor.

Konstruktor se poziva kad kog se neki objekat kreira. Objekti se mogu kreirati: kao globalne promeljive,
kao lokalne promeljive, preko eksplicitnog koriscenja operatora new, preko eksplicitnog poziva
konstruktora iil privremi objekat. Konstruktori se takodje pozivaju kada se neki ojbkeat kreira kao deo
drugog objekta.

Slicno, kad vas objekat izadje iz oblasti vazenja, memorija koju je koristio taj objekat mora se “ocistiti”.
C++ Obezbedjuje specijalnu funkciju clanicu, tzv. Destructor, koja se poziva kad god se vas objekat
unistava tako da mozete da obavite bilo koji process ciscenja, kao sto je oslobadjanje memorije ili drugih
sistemskih resursa koje je koristio objekat.

C++ takodje obezbedjuje jos 2 specijlane funkcije koje imaju specijalnu ulogu. Kadgod neki objekat mora
da se koprira, uvodi se njegov konstruktor za kopiranje (eng. Copy constuctor). Konacno, kad god se
neko objektu dodeljuje vrednost, uvodi se njegov operator dodeljivanja.

Konstruktori

Konstruktori je odgovoran za pretvaranje sirove memorije, alocirane nekom objektu u upotrebljiv


objekat. Konstruktori se javljaju u vise oblika. Postoje podrazumevani konstruktori, konstruktor za
kopiranje I drugi konstruktori koji prihvataju razlicite argumente.

Konstruktori
*Funkcija clanica koja nosi isto ime kao I klasa naziva se konstruktor (engl. Constructor). Ova funkcija se
uvek poziva prilikom nastantka te klase.

*konstruktor nema tip koji vraca. Konstruktor moze da ima argument proizvoljnog tipa unutar
konstruktora, clanovima objekta pristupa se kao I u bilo kojoj drugoj funkciji clanici.

*konstruktor se uvek implicitno poziva pri nastanku objekta klase,odnosno na povetku zivotnog veka
svakog objekta date klase.

*konstruktor, kao I svaka funkcija clanica, moze biti preklopljenja (engl overloaded). Konstruktor koji se
moze pozvati bez stvarnigh arugmena nema fali

Primer:

Class x{
public:
x ();//konstruktor bez parametara
x(double);}
x(char*);
//…
};
Void maint () {
Double d=3.4;
Char *p=”niz znakova”
X a(d),// poziva se x(double)
b(p), ),// poziva se x(char*)
c;// poziva se x ()
}

*Pri definisanju objekta c sa zahtevom da se poziva podrazumevati konskturktor klase X, ne treba


navesti X c(); (jer je to deklaracija funkcije), vec samo X c;.
*Pre izvrsavanja samog tela konsktora klase, pozivaju se konstruktori clanova. Argumenti ovih poziva
mogu da se navedu iza zaglavlja definicje (ne deklaracije) konstruktora klase, iza znaka: (dvotacka):
Class YY {
Public:
YY(int) {…} moze I ovako ali se ne preporucuje YY(int j)
//…

Class XX {
Public:
XX(int);
Private:
YY y;
Int i;

XX::XX(int k): y(k+1), y(k-1){


//y je inicijalizovan sa k+1,a sa k-1
//… ostatak konstruktora
}
*Prvo se pozivaju konsktori clanova, po redosledu deklarisanja u deklaraciji klase, pa se onda izvrsava
telo konstruktora klase.

Ovaj nacin ne samo da je moguc, vec je I jedino ispravan: navodjenje inicijalizatora u zaglavlju
konstruktora predstavalja specifikaciju inicijalizacije clanova (koji su ugradjenog tipa ili su objekti klase),
sto je razlicito od operacije double fali

* Konstruktor se moze pozvati I eksplicitno u nekom izrazu. Tada nastaje privremeni objekat klase
pozivom odgovarajuceg kkonstruktora sa nevedenim argumentima. Isto se desava ako se u inicijalizato
eksplicitno navede poziv konstruktora:

Void main (){


Complex c1 (1,2.4), c2; // konstruktor sa 2 vrednosti, c2-konstruktor koji nema upotrebnu vrednost
C2=c1+ Complex3.4,-1.5);// privremeni objekat
Complex c3= complex (0.1,5); // o5 privremeni objekat
//koji se kopira u c3
}
*Kada se kreira niz objekata neke klase, poziva se podrazumevani konstruktor za svaku komponentu niza
ponaosob, po rastucem redosledu indexa

Podrazumevani konstruktor
Podrazumevani konstruktor je konstruktor koji nema argumenata. Podrazumevani konstruktor
Za klasu X ima oblik X::(). Konsktuktor koji ima sve podrazumevane argument, X::X(const int x=0), npr,
takodje je podrazumevani konstruktor, posto se on moze pozvati bez argument.
Podrazumevani konstruktori omogucavaju objektima da budu kreirani bez prosledjivanja bilo kakvih
parametara konstruktoru. Npr, deklaracija

String s;

Za rezultat daje string s, koji jos uvek nema vrednost; to je jedan prazan string.

Podrazumevani konstruktor obicno kreira objekat koji predstavlja null instance konkretnog tipa koji klasa
oznacava. Podrazumevani konstruktor za kompleksni broj moze rezultirati u objektu sa vrednoscu nula,
dok Podrazumevani konstruktor zca povezanu listu moze rezultovati praznom listom.

Preporuka 1: Obezbediti podrazumevani konstruktor za svoju klasu. Koristite podrazumevane argument


da izbegnete pojavljivanje posebnog podrazumevanog konstruktora koji nema argumente.

Cesto cete omoguciti korisnicima vasih klasa da prosledjuju argument konstruktoru. Bolje je da
obezbedite konstruktora

Konstruktor za kopiranje

Konstruktor za kopiranje je specijalni konstruktor koji moze da se pozove da kopira objekat. Konstruktor
za kopiranje za klasu X ima oblik X::(const X&). U sl fragmentu koda s2 se kreira pozivanjem string-ovog
konstruktora.
------------------------------------------------------------------------------------------------------------------------------------------
Preklapanje operatora u c++

Preklapanje funkcija u c++ dozvoljava


-da se u istom program pojave dve ili vise funkcija sa istim nazivom
-da se u okviru klase mogu pojaviti metode sa istim nazivom
-da se u dve razlicite klase mogu pojaviti metode sa istim nazivom

Pravilo ucuvanja semantike.

Zato se usvajaju neke opste metode ciji su nazivi uvek isti!. Npr u Delphi-u sve metode za crtanje nose
naziv “Draw”.

Preklapanje operatora

Da bi se na najbolji nacin smanjile greske….


OGRANICENJA
Preklapanje operatora mozemo izvrsiti na 2 nacina, prijateljske funkcije.

OPERATOR THIS

Unutar svake f-je clanice postoji implicitni (podrazumevani, ugradjeni)


Pokazivac this je u stvari skriveni argument funkcije clanice. Poziv objekat.f() prevodilac prevodi kod koji
ima semantiku kao f()

IMPLICITNI THIS POKAZIVAC

Preklapanje relacionih operatora.


Relacioni operatori se takodje mogu preklopiti metodom ili prijateljskom funkcijom.

Preklaopanje aritmetickih operatora.


Koriscenje privremenog objekta

Preklapanje inkrementa I dekrementa

PREPORUKE O PREKLAPANJU OPERATORA:

INLINE FUNKCIJE CLANICE


KAda je telo funkcije clanice ne samo deklarisano, vec I definisano unutar deklracije klase, kaze se da je
funkcija se da je funkcija ugradjena (inline).

Inline je zapravo zahtev za optimizaciju koda koji kompajler moze, ali ne mora da ispuni.

Funkcije clanice koje su definisane unutar klase,automatski su oznacene kao inline


kompajler ce pokusati telo funkcije na mesto poziva
telom inline funkcije mora biti viljivo u svakoj datoteci koja koristi inline funkciju
zato je dobro da inline funkcije clanice budu definisane u zaglavlju u kojem je deklarisana I klasa.
Inline int inc(int i)

Tip naziv f-je(argument f-je)


UGradjene funkcije eliminusu potrebu za makroima:

#define <ime> (<lista argumenata>) <tekst zamene>.

DEFINICIJA MAKROA

Direktiva #define se takodje moze korisiti da definice makroe sa parametrima. Makro je ime za naredbe I
izraze. Npr.
#define SQ(X) X*X

Pravilo za pisanje makroa:

DEFINICIJA I VRSTE APSTRAKCIJE

PRISTUP APST NA 2 NACINA

You might also like