ОО1/К1 2023

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

Први колоквијум, сколска 2023/2024 година. Одржан је 02.11.2023. и трајао је 20 минута.

  • За питања са више одговора, тачни одговори су подебљани и уоквирени
  • За питања за које се одговори уносе, тачни одговори су подвучени и сакривени, тако да се прикажу када изаберете тај текст (пример: овако)
  • Притисните лево дугме испод за сакривање и откривање свих одговора, или десно дугме за укључивање и искључивање интерактивног режима:


1. задатак

Повезати основне концепте објектно оријентисаног програмирања с једним од понуђених описа који најбоље одговара концепту Овако изгледају задаци са одговорима понуђеним у падајућем менију.

  1. Полиморфирзам Понашање објекта не зависи само од типа показивача (упућивача) који показује на објекат већ од типа показиваног (упућиваног) објекта који је познат у време извршења
  2. Апстракција Препознавање битних својстава скупова сличних објеката уз занемаривање небитних детаља и представљање заједничком класом
  3. Капсулација Сакривање имплементације (репрезентације стања и реализације понашања) уз објављивање интерфејса кроз споља доступне декларације метода
  4. Наслеђивање Увођење новог типа података (класе) на основу постојећег са знаћењем да су примерци новог типа специјална врста примерака постојећег типа

2. задатак

Које тврдње везане за програмски језик C++ су тачне?

  1. Глобално име не може да се дефиниште унутар фунцкије, али може унутар класе
  2. У једној датотеци с изворним кодом може да постоји глобална променљива која има исто име као локална променљива
  3. Локално име има досег од места декларације или дефиниције до краја блока у коме је дата декларација или дефиниција
  4. Унутар тела функције ф1 може да се приступи локалној променљивој а која је дефинисана у телу друге функције ф2 коришћењем унарног оператора :: испред имена те локалне променљиве (::а)
  5. Унутар тела функције постоји начин да се приступи глобалној променљивој иако је у телу фунцкије декларисана локална променљива с истим именом

3. задатак

Које од следећих тврдњи су тачне за програмски језик C++?

Изаберите један или више одговора

  1. Уколико применом оператора неw додела меморије не успе, грешка се подразумевано пријављује изузетком бад_аллоц
  2. Оператор делете мења вредност показивача операнда
  3. Примена оператора делете не враћа никакав резултат (тип резултата је воид)
  4. тип резултата оператора неw је воид *
  5. примена оператора делете над операндом типа показивача који има вредност нуллптр има недефинисано понашање

4. задатак

Шта исписује следећи програм на језику C++?

Напомена: Уколико сматрате да се програм не преводи, уписати НП. Уколико сматрате да се дешава грешка у извршавању уписати Г.

#include <iostream>
using namespace std;

int main() {
    int a = 5;
    int b = 2;
    int &c = a;
    c++;
    c = b;
    c++
   
    cout << a << b << c;
    return 0;
}

Одговор: 323 Објашњење: Наредбом инт &ц = а смо референцу ц трајно везали за променљиву а. Свака операција над ц ће од тог тренутка бити операција над а, и обрнуто. Зато ц = б не мења на шта упућује ц него вредност б додељује ц (самим тим и а)

5. задатак

Како може бити дефинисана функција ф да би се дати програмски код на језику C++ успешно преводио?

int main() {
    int i = 3;
    const int &ri = i;
    f(ri);
    return 0;
}
  1. воид ф(инт и) {}
  2. воид ф(инт &&и) {}
  3. воид ф(цонст инт &&и) {}
  4. воид ф(цонст инт &и) {}
  5. воид ф(инт &и) {}

6. задатак

Шта исписује следећи програм на језику C++?

#include <iostream>

class X {
public:
    int m() {
        static int i = 0;
        return ++i;
    }
};

int main() {
    X x1, x2;
    std::cout << x1.m() << x1.m() << x2.m() << std::endl;
}

Одговор: 123 Објашњење: Не постоји посебне "верзије" метода за сваки објекат, већ је метод једна јединствена функција за читаву класу. Зато је статичка променљива и јединствена за све позиве метода м()

7. задатак

За наведене методе класе Класа навести оне у којима је показивач тхис типа цонст Класа * цонст

  1. воид м(цонст Класа*) цонст;
  2. воид м(цонст Класа*);
  3. воид м(Класа*) цонст;
  4. воид м(Класа*);
  5. воид м() цонст;

Објашњење: Показивач тхис је увек типа Класа * цонст јер се не може мењати адреса на коју показује. Уколико је метод обележен квалификатором цонст, то значи да се у том методу објекат позивалац не мења што тхис чини цонст Класа * цонст. Сви аргументи метода су небитни за тхис

8. задатак

Шта исписује следећи програм на језику C++?

Напомена: Уколико сматрате да се програм не преводи, уписати НП. Уколико сматрате да се дешава грешка у извршавању уписати Г.

#include <iostream>

class A {
    int a;
public:
    A(int b = 2) : a(b) {std::cout << a;}
};

int main() {
    A niz[3];
    niz[1] = A(5);
    return 0;
}

Одговор: 2225 Објашњење: Приликом иницијализаије низа имплицитно се позива но-арг конструктор који иницијализује А::а на 2 и исписује га. А(5) затим позива конверзиони констркутор који А::а додељује вредност 5 и исписује је.

9. задатак

Које од тврдње су тачне за језик C++?

Изаберите један или више одговора:

  1. Да би пријатељска глобална функција приступала приватним члановима класе којој је пријатељ, њена декларација или дефиниција мора да буде наведена у приватној секцији те класе
  2. Функција може да буде пријатељска само једној класи
  3. Пријатељска фунцкија мора да буде дефинисана у телу класе којој је пријатељ
  4. Пријатељска функција може да приступа приватним методима класе којој је пријатељ
  5. Глобална пријатељска функција не може да користи показивач тхис на објекат класе којој је пријатељ

10. задатак

Која од дефиниција функција може да се појави на месту *** у следећем сегменту кода на језику C++ (предпоставити да је функција г() исправно дефинисана у другој датотеци)

int x;

void f() {
    static int s;
    int x;
    extern int g();
    class L {
    public:
        ***
    };
}
  1. L(инт &x) {x = 1;};
  2. инт л() {ретурн г();}
  3. инт х() {ретурн x;}
  4. инт ј() {ретурн с;}
  5. инт к() {ретурн ::x;}

Напомене