You are on page 1of 12

Metode Programiranja - Pitanja za prvi i drugi kolokvijum

Pitanja za prvi kolokvijum

1. Postoje dve vrste podataka. Navedite ih.


Podaci mogu biti: Promenljive i konstante.

2. ta je deklaracija a ta definicija promenljive. Objasniti i navesti primer.


Deklaracijom se zauzima prostor u memoriji za datu promenljivu, a definicijom se pored
zauzimanja memorije vri jo i postavljanje inicijalne vrednosti. Na primer:
int x1; // deklaracija
int x2=1; // definicija

3. Upotrebom kojeg unarnog prefiksnog operatora se moe utvrditi koliina memorije koja
se zauzima za smetanje podatka odreenog tipa?
Veliina memorije u bajtovima, koja je potrebna za smetanje podatka odreenog tipa moe
se utvrditi primenom prefiksnog unarnog operatora sizeof.

4. ta je pokaziva i ta je njegova vrednost.


Pokaziva je promenljiva koja sadri neku adresu.

5. Primer deklaracije pokazivaa.


int *iPok; // pokazivac na tip int
double *dPok; // pokazivac na tip double
void *vPok; // genericki pokazivac

6. Napisati deklaraciju pokazivaa i promenljive. Napisati da napisani pokaziva pokazuje


na napisanu promenljivu.
Kada kaemo da neki pokaziva pokazuje na neku promenljivu, to zapravo znai da adresa te
promenljive je sadraj pokazivaa.
int *pi1;
int x1;
pi1=&x1;

7. Za ta se koristi unarni operator &?


Unarni operator & vraa memorijsku adresu nekog podatka (na primer, &x).

8. Ispisati vrednost promenljive x, na koju pokazuje pokaziva p. Ispis izvriti putem


pokazivaa.

int x;
int *p;
p=&x;

9. ta je ime niza?
Ime niza je pokaziva koji sadri adresu prvog elementa niza.
10. Koje vrste nizova postoje?
Memorija za elemente niza moe biti zauzeta statiki i dinamiki, pa razlikujemo statike i
dinamike nizove.

11. Kako se pristupa i-tom elementu statikog i dinamikog niza celih brojeva. Naziv niza je a.
Napisati primer.
i-tom elementu se moe pristupiti kod statikog niza sa a[i]
a kod dinamikog sa *(a+i) .

12. Kojim brojem (indeksom) poinje indeksiranje elemenata niza u programskom jeziku
C++?
Indeksiranje niza poinje sa brojem 0.

13. Napisati deklaraciju proizvoljne funkcije, odnosno prototip (sa argumentima).

TipFunkc imeFunkc (TipArg_1, TipArg_2, ... TipArg_n);

14. Napisati definiciju proizvoljne funkcije (sa argumentima).


TipFunkc imeFunkc (Arg_1, Arg_2, ... Arg_n) {
// TELO FUNKCIJE
}

15. ta je referenca?
Referenca ili upuiva u programskom jeziku C++ je alternativno ime za neki podatak (drugo ime
za neki podatak).

16. Napisati definiciju reference.

Referenca se definie na ovaj nain:


int x=5;
int &rx=x; //rx je referenca inicijalizovana promenljivom x
double y1;
double y2;
double &ry; //greska, ovo ne moze
double &ry=y1; //sad je u redu
ry=y2; //greska, jer referenca ne moze da menja vrednost

17. Znaenje operatora << i >> u programskom jeziku C++.


Slue za pomeranje levog operanda za onoliko binarnih mesta koliko je vrednost desnog operanda,
meutim ukoliko je prvi operand referenca na tekstualnu datoteku onda te operatore koristimo za
ulaz/izlaz podataka.

18. emu slue refernce cin i cout?

Referenca na glavni ulaz raunara (obino je to tastatura) ima identifikator cin, a referenca na
glavni izlaz raunara (obino je to ekran) ima identifikator cout.
19. Napisati primer preklapanja imena funkcija.
bool f(int a, int b);
bool f(double a, double b);

20. Navesti primer funkcije sa podrazumevanom vrednosti argumenata.


void f(int x=2, int y=3) { . . . }

21. ta je imenski prostor i za ta se isti koriste.


Imenski prostori slue za grupisanje globalnih imena u velikim programskim sistemima. Ako se
delovi programa stave u razliite imenske prostore, tada ne moe doi do konflikta sa korienjem
imena.

22. ta je objekat a ta klasa?


Objekat predstavlja model entiteta, a klasa (objekata) predstavlja model klase entiteta.

23. Napisati oblik definicije klase u programskom jeziku C++?


class MyClass {
// <PODACI-LANOVI>
// <OBJEKTI-LANOVI>
// <FUNKCIJE-LANICE ili METODE>
};

24. Navesti gradivne elemente klase?


Podaci-lanovi i funkcije-lanice. Podaci ine internu strukturu klase. Funkcije lanice karakteriu
ponaanje klase.

25. Navesti prava pristupa elementima klase.


Prava pristupa mogu biti:
o private
o public
lanu klase koji je u private-segmentu moe se pristupati samo iz unutranjosti klase (iz
metoda).
lanu klase koji je u public-segmentu moe se pristupati kako iz unutranjosti, tako i iz
spoljanjosti klase (iz metoda, iz programa koji koriste tu klasu itd.).

26. ta je konstruktor klase? Napisati primer.


Konstruktor je metoda koja kreira objekat. Osobine konstruktora su sledee:
o Konstruktor ima isto ime kao i klasa
o Konstruktor moe i ne mora da ima argumente
o Konstruktor nikad ne vraa vrednost (nikada nema tip i na kraju tela nema naredbu
return)
Primer: class XYPoint {
private:
double x;
double y;
public:
XYPoint() { x=0; y=0; } // ovo je konstruktor
27. Napisati konstruktor klase Trougao sa parametrima.
class Trougao {
private:
/* P O D A C I C L A N O V I */
double a;
double b;
double c;
public:
/* M E T O D E*/
/* Konstruktor */
Trougao() { a=3; b=4; c=5; }

28. Napisati konstruktor klase Trougao bez parametara.

class Trougao {
private:
/* P O D A C I C L A N O V I */
double a;
double b;
double c;
public:
/* M E T O D E*/
/* Konstruktor */
Trougao() { }

29. Napisati metodu za raunanje Obima Trougla. Stranice trougla su deklararisane sa:
double a; double b; i double c;

double Trougao::getO() const { return a+b+c;}

30. Napisati metodu za raunanje Povrine Kvadrata. Stranica kvadrata deklarisana je sa:
double a;

double Kvadrat::getP() const { return a*a;}

31. Napisati primer konstruktora inicijalizatora na primeru Valjka.


Valjak(double rr=1, double hh=1):B(rr), M(2*rr*M_PI, hh){}

32. Napisati konstruktor inicijalizator sa podrazumevanim vrednostima parametara za


klasu PP3Prizma (sastoji se od jednakostraninog trougla i pravougaonika).

33. ta je ugraeni (podrazumevani) konstruktor?


Ugraeni konstruktor je metoda koja vri kreiranje objekta, ali ne i njegovu
inicijalizaciju. U svakoj klasi postoji tzv. ugraeni (default) konstruktor. Ukoliko u klasi ne
napiemo konstruktor tada kreiranje objekta vri ugraeni konstruktor koji kreira objekat,
ali ga ne postavlja u inicijalno stanje. Uraeni konstruktor zauzima potrebnu memoriju za
objekat i daje ime objektu, ali ne inicijalizuje njegova polja, tako da ne znamo koje je
inicijalno stanje objekta.
34. ta je konstruktor kopije. Napisati primer konstuktora kopije za klasu Trougao.
Konstruktor kopije je metoda koja vri kreiranje objekta i njegovu inicijalizaciju
kopiranjem sadraja drugog objekta iste klase.
Primer:
class Trougao (const Trougao &t) {x=t.x;}

35. Za ta se koristi set metoda. Napisati primer set metode za A stranicu pravougaonika.
Stranica a deklarisana je sa double a;

Primer:

public:
/*METODE*/
/*Konstruktor*/
Pravougaonik () { a=3; b=5; }

/*SET metode*/

void setA (double aa) { a=aa; }

36. Za ta se koristi get metoda. Napisati primer get metode za B stranicu pravougaonika.
Stranica b deklarisana je sa double b;

Primer:

public:
/*METODE*/
/*Konstruktor*/
Pravougaonik () { a=3; b=5; }

/*GET metode*/
double getB() const { return b; }

37. Napisati definiciju za kompoziciju klase.


Ve smo rekli da entiteti poseduju razliite osobine i meusobno stoje u nekim odnosima.
Metodom apstrakcije se odnos izmeu pojedinanih entiteta moe postaviti na vii nivo, tj. nivo
klasa entiteta.
U fazi implementacije klasa koja predstavlja celinu naziva se vlasnik, a klasa koja odgovara delu
naziva se komponenta. Isti termini se koriste i za pojedinane objekte. Kompozicija jeste takva veza
klasa, za koju vai to da vlasnik poseduje komponentu, pri emu
komponenta ne moe postojati pre kreiranja i posle unitenja vlasnika. Drugim reima, ivotni vek
komponente sadran je u ivotnom veku vlasnika.
Ako svaka instanca klase A poseduje bar jednu instancu klase B , pri emu stvaranje i
unitavanje date instance klase kae da izmeu klase B zavisi od stvaranja i unitavanja instance
klase A , onda se
A i klase B postoji veza kompozicije.
38. ta je preklapanje metoda u Objektno Orijentisanom Programiranju i navesti primer.
Preklapanje metoda je mogunost da u klasi postoje dve ili vie metoda koje mogu imati isto ime.
class MyClass {
private:
double x;
double y;
public:
void f(int xx, int yy) {
x=xx;
y=yy;
cout<<Prva verzija<<endl;
}
void f(double xx, double yy) {
x=xx;
y=yy;
cout<<Druga verzija<<endl;
}
};

i posmatrajmo kratak test program:


int main() {
MyClass mc;
int a=2, b=3;
double c=2.4, d=4.6;
mc.f(a, b);
mc.f(c, d);
return 0;
}
, tada e prvo biti pozvana prva verzija metode f(int, int), a zatim druga verzija metode
f(double, double).

39. ta je preklapanje operatora. Napisati preklapanje operatora + (plus) za klasu kompleksnog


broja Complex.
Preklapanje operatora je jedna od tipinih karakteristika programskog jezika C++. Preklapanje
operatora je mehanizam pomou kojeg emo moi da nauimo veinu standardnih operatora koje
koristimo u programskom jeziku C++ kako da se ponaaju u sluaju da njihovi operandi vie nisu
standardnih tipova (kao to je int, double itd.), ve klasnih tipova (kao to je, na primer, MyClass i sl.).

friend Complex operator+(const Complex&, const Complex&);

40. ta je preklapanje operatora. Napisati preklapanje operatora - (minus) za klasu


kompleksnog broja Complex.
Preklapanje operatora je jedna od tipinih karakteristika programskog jezika C++. Preklapanje
operatora je mehanizam pomou kojeg emo moi da nauimo veinu standardnih operatora koje
koristimo u programskom jeziku C++ kako da se ponaaju u sluaju da njihovi operandi vie nisu
standardnih tipova (kao to je int, double itd.), ve klasnih tipova (kao to je, na primer, MyClass i sl.).

friend Complex operator-(const Complex&, const Complex&);


41. ta je preklapanje operatora. Napisati preklapanje operatora * (mnoenje) za klasu
kompleksnog broja Complex.
Preklapanje operatora je jedna od tipinih karakteristika programskog jezika C++. Preklapanje
operatora je mehanizam pomou kojeg emo moi da nauimo veinu standardnih operatora koje
koristimo u programskom jeziku C++ kako da se ponaaju u sluaju da njihovi operandi vie nisu
standardnih tipova (kao to je int, double itd.), ve klasnih tipova (kao to je, na primer, MyClass i sl.).

friend Complex operator*(const Complex&, const Complex&);

42. ta je preklapanje operatora. Napisati preklapanje operatora << (ispis na konzolu) za klasu
kompleksnog broja Complex.
Preklapanje operatora je jedna od tipinih karakteristika programskog jezika C++. Preklapanje
operatora je mehanizam pomou kojeg emo moi da nauimo veinu standardnih operatora koje
koristimo u programskom jeziku C++ kako da se ponaaju u sluaju da njihovi operandi vie nisu
standardnih tipova (kao to je int, double itd.), ve klasnih tipova (kao to je, na primer, MyClass i sl.).

fostream& operator<<(ostream &out, const Complex &z) {


if(z.re==0 && z.im!=0) out<<z.im<<"i";
if(z.re!=0 && z.im==0) out<<z.re;
if(z.re!=0 && z.im>0) out<<z.re<<"+"<<z.im<<"i";
if(z.re!=0 && z.im<0) out<<z.re<<z.im<<"i";
return out;
}

43. ta je preklapanje operatora. Napisati preklapanje operatora = (dodela vrednosti) za klasu


kompleksnog broja Complex.
Preklapanje operatora je jedna od tipinih karakteristika programskog jezika C++. Preklapanje
operatora je mehanizam pomou kojeg emo moi da nauimo veinu standardnih operatora koje
koristimo u programskom jeziku C++ kako da se ponaaju u sluaju da njihovi operandi vie nisu
standardnih tipova (kao to je int, double itd.), ve klasnih tipova (kao to je, na primer, MyClass i sl.).

Complex& Complex::operator=(const Complex &z) {


re=z.re; im=z.im;
return *this;
}

44. ta je preklapanje operatora. Napisati preklapanje operatora == (dodela vrednosti) za klasu


kompleksnog broja Complex.
Preklapanje operatora je jedna od tipinih karakteristika programskog jezika C++. Preklapanje
operatora je mehanizam pomou kojeg emo moi da nauimo veinu standardnih operatora koje
koristimo u programskom jeziku C++ kako da se ponaaju u sluaju da njihovi operandi vie nisu
standardnih tipova (kao to je int, double itd.), ve klasnih tipova (kao to je, na primer, MyClass i sl.).

bool operator==(const Complex &z1, const Complex &z2) {


if(z1.re==z2.re && z1.im==z2.im)
return true;
else
return false;
}
45. ta je preklapanje operatora. Napisati preklapanje operatora /= (deljenje uz dodelu
vrednosti) za klasu kompleksnog broja Complex.
Preklapanje operatora je jedna od tipinih karakteristika programskog jezika C++. Preklapanje
operatora je mehanizam pomou kojeg emo moi da nauimo veinu standardnih operatora koje
koristimo u programskom jeziku C++ kako da se ponaaju u sluaju da njihovi operandi vie nisu
standardnih tipova (kao to je int, double itd.), ve klasnih tipova (kao to je, na primer, MyClass i sl.).

46. Znaenje i upotreba operaora new.


New je operator u jeziku c++ je konsturisan da dinamiki alocira slobodnu memoriju pomou
konstruktora.
Primer:
p_var = new typename;

p_var je prethodno deklarisani pokaziva tipa typename

47. Znaenje i upotreba operatora delete.

Poziv operatora delete, poziva destruktor i vraa zauzetu memoriju alociranu operatorom new.

48. ta je kljuna re this?


U svakom objektu svake klase postoji podatak-lan this koji jeste pokaziva na klasu kojoj taj objekat
pripada i koji sadri adresu datog objekta. Drugim reima, podatak-lan this nekog objekta jeste
pokaziva koji sadri adresu objekta kojem pripada.
Poto podatak-lan this jeste pokaziva koji sadri adresu od objekta kojem pripada, to znai da sa
*this pristupamo memorijskom prostoru datog objekta.

49. ta je podrazumevani dekstruktor?


Destruktor je metoda koja unitava objekat i ima sledee karakteristike:
o ima isto ime kao klasa i ispred imena obavezan znak ~ (tilda ili talasi),
o nema parametre,
o ne poziva se direktno, ve se poziva automatski u trenutku kada je potrebno unititi
objekat (na primer, na kraju funkcije je potrebno unititi sve lokalne objekte).

U svakoj klasi postoji ugraeni (default) konstruktor i ugraeni (default) destruktor. Ukoliko
destruktor nije napisan tada e posao unitavanja objekta obaviti ugraeni destruktor.

50. Kako se poziva destruktor?


Primer:

public:

DinString(){ duzina=0; text=NULL; }


~DinString() { delete[] text; } /*DESTRUKTOR*/
Pitanja za drugi kolokvijum

1. ta je nasleivanje?
Nasleivanje je veza izmeu klasa koja podrazumeva preuzimanje sadraja nekih klasa, odnosno
klasa-predaka i na taj nain, uz mogunost modifikacije preuzetog sadraja i dodavanje novog dobija se
klasa-potomak.
2. Navesti naine izvoenja klase.
Klasa B se izvodi iz klase A na sledei nain:

public
class B : protected A {
public

private:

...
protected:
...
public:
...
};

Ponaanje lanova natklase u zavisnosti od naina izvoenja (koje moe biti private, protected ili
public).

3. Ako je lan u nadklasi public a nain izvoenja je private, isti lan u podklasi je?
Private.

4. Ako je lan u nadklasi protected a nain izvoenja je private, isti lan u podklasi je?
Private.

5. Ako je lan u nadklasi private a nain izvoenja je public, isti lan u podklasi je?
Nije vidljiv.

6. Koja je razlika u pristupanju lanu klase koji je u private i koji je u protected delu?
Razlika u pristupanju lanu klase koji je private ili koji je protected je sledea:
o lanu klase koji je private moe se direktno pristupati samo iz metoda te klase i njenih
prijateljskih funkcija.
o lanu klase koji je protected moe se direktno pristupati iz metoda te klase, njenih
prijateljskih funkcija i metoda njenih potklasa.

7. ta se ne nasleuje?
ta se ne nasleuje:
o Konstruktori i destruktori se ne nasleuju.
o Prijateljstvo se ne nasleuje.
8. Napisati konstruktor sa parametrima klase JKTrougao (jednakokraki trougao) koja
nasleuje klasu Trougao.

JKTrougao(double aa, double bb) : Trougao(aa, bb, bb)

9. Napisati konstruktor kopije klase JSTrougao (jednakostranini trougao) koja nasleuje


klasu JKTrougao (jednakokraki trougao).

JSTrougao(const JSTrougao &jst) : JKTrougao(jst.a, jst.b) {}

10. Napisati konstruktore klase Kocka koja nasleuje klasu Kvadar.

Kocka(double aa=1) : Kvadar(aa,aa,aa) {}


Kocka(const Kocka &k) : Kvadar((Kvadar)k) {}

11. Napisati konstruktore klase Kvadrat koja nasleuje klasu Pravougaonik.

Kvadrat(double aa=1) : Pravougaonik(aa,aa) { }


Kvadrat(const Kvadrat &k) : Pravougaonik((Pravougaonik)k) {}

12. Napisati klasu JSTrougao (jednakostranini trougao) koja je direktno izvedena iz klase
Trougao (raznostranini trougao).
class JSTrougao : public Trougao {
public:
JSTrougao() : Trougao(1,1) {}
JSTrougao(double aa, double bb) : Trougao(aa, aa) {}
JSTrougao(const JSTrougao &jst) : Trougao(jst.a, jst.b, jst.c)
{}

13. Kakve metode postoje?


Razlikujemo statike i virtuelne metode.

14. Koja je razlika izmeu statikih i virtuelnih metoda?


Virtualne metode razlikuju se od statikih po tome to se na mestu poziva u prevedenom kodu ne nalazi
direktan skok na njihov poetak.

15. Napisati proizvoljnu virtuelnu metodu.

virtual double getO() const=0;


16. Napisati klasu roditelja sa virtuelnom metodom i klasu potomka koja redefinie datu
metodu.

class Figura {
public:
virtual double getO() const=0;
class Trougao : public Figura {
public:
double getO() const { return a+b+c; }

17. ta je apstraktna metoda?


Apstraktna metoda je virtuelna metoda koja nema telo (tj. nema realizaciju).

18. Napisati prototip apstraktne metode.


virtual Tip_metode ime_metode(lista_parametara)=0;

19. ta je apstraktna klasa?


Klasa koja ima bar jednu apstraktnu metodu naziva se apstraktna klasa. Apstraktna klasa se ne moe
instancirati, tj. ne moe se kreirati objekat apstraktne klase.

20. Napisati primer apstraktne klase.

class Figura {
public:
virtual double getO() const=0;
virtual double getP() const=0;
};

21. ta su zajedniki lanovi klase?


Zajedniki lan klase se dobija tako to se ispred njegove deklaracije navede rezervisana re
static. Zajedniki podatak-lan je zajedniki za sve objekte date klase. Drugim reima, to znai da u
svakom trenutku vrednost tog podatka-lana je jednaka za sve objekte date klase.

22. Napisati primer klase koja poseduje zajedniki lan.

class Figura {
private:
static int count;
static int id;

23. ta je generika klasa?


U programskom jeziku C++ postoji mehamizam pomou kojeg moemo napisati ablon (eng.
template) kojim opisujemo opti sluaj (bez upotrebe konkretnih tipova). Klasa koja je napisana
pomou ablona naziva se generika klasa. Kada se ablonu navedu konkretni tipovi dobijamo
konkretne klase.
24. Napisati prototip generike klase Pair.

template<class T1, class T2>


class Pair {
private:
T1 first;
T2 second;

25. Napisati generiku klasu Pair bez implementacije metoda.

You might also like