OO1/Septembar 1 2025
Ispit u septembarskom 1 roku 2025. godine održan je 18. septembra i trajao je 90 minuta. Svaki zadatak nosi po 5 poena.
1. zadatak
Postavka
U nekom programu obpađuje se više instanci binarnix stabala koja se sastoje od čvorova u kojima su određeni podaci. Klijenti obradu traže za dato stablo. Postoji više različitik vrsta obrada koje se, između ostalog, sastoje i od različitih redosleda obilaska stabla (preorder, inorder, postorder), pri čemu se u budućnosti mogu dodavati novi načini obrade. Način obrade može se konfigurisati za svaku pojedinačnu instancu stabla. Osmislii klase, njihove atribute i relacije i rasporediti odgovornosti po tim klasama.
Rešenje
2. zadatak
Postavka
Prikazati kako bi sledeći deo programa bio implementiran na jeziku C++.
typedef struct {
ListElem* next;
T t;
} ListElem;
void ListElem_init (ListElem* e, T t) { e->next=0; e->t=t; }
void ListElem_linkToPrev (ListElem* e, ListElem* prev) {
if (prev) { e->next = prev->next; prev->next = e; }
}
Rešenje
3. zadatak
Postavka
Precizno objasniti šta je problem u sledećem delu programa:
char* readln () {
static char buffer [256];
int ch getchar(), i = 0;
while (ch!=EOF && ch!='\n') {
buffer[i++]=ch;
ch = getchar();
}
buffer[i]='\0';
return buffer;
}
Rešenje
Može se desiti indeksiranje van domena.
4. zadatak
Postavka
Napisati izraze kojima se celobrojna promenljiva i uvećavaza 1 posredstvom varijabli x, y i z respektivno.
int i=0, *x=&i, &y=i, *&z=x;
Rešenje
(*x)++; y++; (*z)++;
5. zadatak
Postavka
Klasu X opremiti deklaracijama (ne i definicijama) podrazumevanog konstruktora, konstruktora kopije, operatora dodele kopiranjem, operatora dodele premeštanjem i virtuelnog destruktora.
Rešenje
class X{
public:
X() = default();
X(const X&);
X& operator =(const X&);
X& operator =(X&&);
virtual ~X();
}
6. zadatak
Postavka
Klasu X opremiti operatorom konverzije X* koja može raditi i implicitno, tako da vraća pokazivač na objekat te klase koji se konvertuje. Kratkim primerom ilustrovati upotrebu ove konverzije.
Rešenje
class X{
private:
int val;
public:
X(int v=0): val(v){}
operator X*(){
return this;
}
void print(){
cout<<val;
}
}
int main(){
X x = new X(5);
X* px = x;
pc->print();
return 0;
}