ОО1/К1 2020

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

Г1

1. задатак

Који је тип променљиве p у следећем програму:

int main(void) {
    int i = 1;
    const int k = i;
    auto p = new int + k;
    return 0;
}
  1. int
  2. const int
  3. инт*
  4. const int*
  5. Програм се не преводи.

Објашњење: Вредност p ће бити показивач померен за k.

2. задатак

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

#include <iostream>
 
int &f(int &x){
  return ++x;
}

int main(void) {
  std::cout << f(2);
}
  1. 6
  2. 0
  3. Програм се не преводи.
  4. 5

Објашњење: Функција прима референцу на лвредност а 2 је двредност.

3. задатак

Име симбол представља низ референци на непроменљив показивач на инт. Како се декларише у коду?

  1. ...
  2. ...
  3. int * const &simbol[]
  4. Декларација за симбол се не преводи.

?. задатак

Исти задатак се нашао и на пробном колоквијуму за ИР.

Које тврђење је тачно?

  1. Механизам преклапање[сиц] имена функција је потпуно статички, која функција ће се позвати одређује се у време превођења.
  2. Механизам преклапање[сиц] имена функција је потпуно динамички, која функција ће се позвати одређује се у време извршавања.
  3. Механизам преклапање[сиц] имена функција је потпуно статички, која функција ће се позвати одређује се у време извршавања.
  4. Механизам преклапање[сиц] имена функција је потпуно динамички, која функција ће се позвати одређује се у време превођења.

?. задатак

Исти задатак се нашао и на пробном колоквијуму за ИР.

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

  1. Методи int f() & { return 1; } и int f() && { return 3; } могу постојати у истој класи.
  2. Методи int f() & { return 1; } и int f() const & { return 3; } могу постојати у истој класи.
  3. Методи int f() & { return 1; } и void f() & { } могу постојати у истој класи.

7. задатак

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

#include <iostream>
using namespace std;

class K {
    static int staticId;
    int id = staticId++;
public: 
    K() = default;
    K(const K&) {}
    int m(K arg) {
        return arg.id;
    }
};

int K::staticId = 1;
int main()
{
    K a;
    K b;
    K c(a);
    cout << a.m(c);
}
  1. 1
  2. 2
  3. 5
  4. 3
  5. 4
  6. Више од 5.

Објашњење: Сваком објекту се додељује нови ИД при стварању, а последњи направљени објекат пре извршавања методе јесте сами аргумент методе, копиран приликом прослеђивања.

Г2

1. задатак

Заокружити тачне тврдње у вези са референцама на језику C++:

  1. Могуће је дефинисати референцу на показивач.
  2. Могуће је дефинисати низ референци.
  3. Могуће је дефинисати референцу на референцу.
  4. Могуће је дефинисати показивач на референцу.

2. задатак

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

#include <iostream>
 
int &f(int &x){
  return x++;
}

int main(void) {
  int x = 5;
  std::cout << f(x);
}
  1. 6
  2. 0
  3. Програм се не преводи.
  4. 5

Објашњење: x++ враћа двредност, а не лвредност.

4. задатак

Повезати тврдње у вези са модификаторима метода:

Модификатори
  1. volatile б
  2. const е
  3. & г
  4. && ф
  1. Метода се може звати само ако је текући објекат показивач.
  2. Ознака компајлеру да не врши оптимизације.
  3. Ознака компајлеру да врши оптимизације.
  4. Метода је мутатор.
  5. Метода је инспектор.
  6. Метода се може звати само ако је текући објекат двредност.
  7. Метода се може звати само ако је текући објекат лвредност.
  8. Метода се може звати само ако је текући објекат константан.

5. задатак

Заокружити тачне тврдње у вези са померајућим конструктором на језику C++:

  1. Дефинисањем подразумеваног конструктора брише се уграђени премештајући конструктор.
  2. Дефинисањем копирајућег конструктора брише се уграђени премештајући конструктор.
  3. Померајући конструктор мора да има само један параметар.

6. задатак

Заокружити тачне тврдње у вези са функцијама на језику C++:

  1. Могу се дефинисати више функција истог имена ако имају различити број параметара без подразумеваних вредности.
  2. Могу се дефинисати више функција истог имена ако су им различите повратне вредности.
  3. Не могу се дефинисати више функција истог имена, јер компајлер не би могао да их распозна.
  4. Могу се дефинисати више функција истог имена ако имају различите типове параметара.

7. задатак

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

#include <iostream>
using namespace std;

class L {
    L(const &L l) = delete;
};

class K {
    static int staticId;
    int id = staticId++;
    L l;
public: 
    K() = default;
    K(const K&) {}
    int m(K arg) {
        return arg.id;
    }
};

int K::staticId = 1;
int main()
{
    K a;
    K b;
    K c(a);
    cout << a.m(c);
}
  1. 1
  2. 2
  3. Програм се не преводи
  4. 3
  5. 4

Објашњење: Није могуће копирати класу К при прослеђивању методи јер њено поље класе L не може да се копира.

8. задатак

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

#include <iostream>
using namespace std;

class Klasa {
    static Klasa *napravi()
    {
        cout << 1;
        return new Klasa{0};
    }
    Klasa *clan = napravi();
    public:
        Klasa() { cout << 2; }
        Klasa(int a) : clan(nullptr) { cout << 3; }
};

int main() {
    Klasa k;
}

Одговор: 132

Објашњење: Прво се прави чланско поље позивањем статичке методе која исписује 1 а онда позива конструктор са аргументом, и после тога се иницијализација завршава позивом подразумеваног конструктора.

9. задатак

Допунити XXX са линијом тако да је програм исправан:

#include <iostream>

class A {
        A(const A& a) = delete;
    public:
        int n = 1;
        A() = default;
        A(A&& a) { };
};

void f(A a) {
    std::cout << a.n;
}

int main(void)
{
    XXX
    return 0;
}
  1. f();
  2. A a; f(a);
  3. ф(А());
  4. f(A);

Објашњење: У једином тачном одговору се вредност не копира него премешта.

10. задатак

Заокружити тачне тврдње у вези са статичким пољима у класама на језику C++:

  1. У дефиницији класе се могу дефинисати променљива статичка поља.
  2. Досег имена статичког поља је класа.
  3. Статичком пољу с из класе К се приступа користећи израз К.с.