ОО1/Септембар 1 2025
Испит у септембарском 1 року 2025. године одржан је 18. септембра и трајао је 90 минута. Сваки задатак носи по 5 поена.
1. задатак
Поставка
У неком прoграму обpaђуje се више инстанци бинарниx стабала коjа се састоjе од чворова у коjима су одређени подаци. Клијенти обраду траже за дато стабло. Постоjи више различитик врста обрада коjе се, између осталог, састоjе и од различитих редоследа обиласка стабла (preorder, inorder, postorder), при чему се у будућности могу додавати нови начини обраде. Начин обраде може се конфигурисати за сваку поjединачну инстанцу стабла. Осмислии класе, њихове атрибуте и релациjе и распоредити одговорности по тим класамa.
Решење
2. задатак
Поставка
Приказати како би следећи део програма био имплементиран на језику 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; }
}
Решење
template <typename T>
class ListElem {
private:
T t;
ListElem* next;
public:
ListElem(T tt){
next = nullptr;
t = tt;
}
void linkToPrev(ListElem* prev){
next = prev->next;
prev->next = this;
}
...
}
3. задатак
Поставка
Прецизно објаснити шта је проблем у следећем делу програма:
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;
}
Решење
Може се десити индексирање ван домена.
4. задатак
Поставка
Написати изразе којима се целобројна променљива i увећаваза 1 посредством варијабли x, y и z респективно.
int i=0, *x=&i, &y=i, *&z=x;
Решење
(*x)++; y++; (*z)++;
5. задатак
Поставка
Класу X опремити декларацијама (не и дефиницијама) подразумеваног конструктора, конструктора копије, оператора доделе копирањем, оператора доделе премештањем и виртуелног деструктора.
Решење
class X{
public:
X() = default();
X(const X&);
X& operator =(const X&);
X& operator =(X&&);
virtual ~X();
}
6. задатак
Поставка
Класу X опремити оператором конверзије X* која може радити и имплицитно, тако да враћа показивач на објекат те класе који се конвертује. Кратким примером илустровати употребу ове конверзије.
Решење
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;
}