ОО1/Септембар 1 2025

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу

Испит у септембарском 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;
}