ОО1/Јануар 2021

Извор: SI Wiki
< ОО1
Датум измене: 27. јануар 2021. у 16:37; аутор: KockaAdmiralac (разговор | доприноси) (Naslovi tabela sa opcijama)
Пређи на навигацију Пређи на претрагу
  • За питања са више одговора, тачни одговори су подебљани и уоквирени.
  • За питања за које се одговори уносе, тачни одговори су подвучени и сакривени: овако.
  • Притисните на следеће дугме како бисте их сакрили или открили:

1. задатак

Повежите типове објеката са њиховим животним вековима.

Дате опције
Тип објекта Животни век
  • Динамички објекат е.
  • Статички објекат а.
  • Аутоматски објекат д.
  • Привремени објекат б.
  1. Од дефиниције до краја главне функције
  2. Кратак и недефинисан
  3. Непостојан
  4. Од дефиниције до краја области важења
  5. Непосредно контролише програмер
  6. Одређује преводилац

2. задатак

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

#include <iostream>

int& f(int & param) {
    return param;
}

int main() {
    int a = 0;
    decltype(f(++a)) b = f(a);
    auto &c = f(a);
    b++;
    c++;
    std::cout << a << b << c;
    return 0;
}

Одговор: 222

Објашњење: decltype(f(++a)) се преводи као тип int& јер је то повратна вредност функције f, али се само f(++a) не извршава, тако да a остаје непромењено а b постаје референца на a. auto обично не задржава референцу, али пошто је овде написано auto &c то значи да ће c сигурно бити референца на повратну вредност функције, тако да и c постаје референца на a. Након тога се двапут инкрементира a и исписују три исте вредности (2), јер све ти променљиве показују на исту.

3. задатак

Задатак сличан овоме се појавио као 10. задатак на пробном тесту те године.

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

class A {
   int i;
public:
   A(int ii) { i = ii; }
};
  1. Класа А има имплицитно дефинисани подразумевани конструктор.
  2. Класа А има само један конструктор.
  3. Објекат класе А се може створити позивањем конструктора који нема ниједан параметар.
  4. Објекат класе А се може створити позивањем конструктора који има један аргумент.
  5. Класа А нема подразумевани конструктор.

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

4. задатак

Шта се може искористити уместо *** како би се следећи код преводио без грешака?

#include <iostream>
using namespace std;

class K {
    struct E {
        E* sledeci;
        int n;
    };
    public:
        static E* novi(int n) {
            E* e = new E;
            e->n = n;
            e->sledeci = nullptr;
            return e;
        }
};

int main() {
    ***
    return 0;
}
  1. К::Е* е = К::нови(5); цоут << е->н;
  2. воид* е = К::нови(5);
  3. Е* е = К::нови(5); цоут << е->н;
  4. Ништа од наведеног
  5. К::нови(5);

Објашњење: E се налази у приватној секцији класе K тако да се том имену не може приступити. С друге стране, сви показивачи имају исту величину, па је зато враћени показивач могуће доделити променљивој показивачког типа на void.

5. задатак

Колико аргумената могу прихватати следећи оператори уколико се преклапају као нестатичке методе:

Дате опције
Оператори Број аргумената
  • operator! а.
  • operator/ б.
  • operator() д.
  1. 0
  2. 1
  3. 2
  4. Произвољан број аргумената
  5. Оператор се не може преклопити као нестатичка метода

6. задатак

Које све дефиниције метода могу да се нађу уместо ???:

class A {
public:
    virtual void m1() { }
    void m2() { }
    virtual void m3() final { }
};
class B : public A {
public:
    ???
};
  1. воид м1() { }
  2. воид м2() { }
  3. воид м3() { }
  4. воид м2() оверриде { }
  5. воид м3() оверриде { }
  6. Ништа од наведеног

Објашњење: m1 може да се нађе у изведеној класи и са override и без јер је виртуелна, слаже се потпис и може се надјачати. m2 може да се нађе у изведеној класи без override, јер се тако сакрива метод из основне класе, али не може са override јер није виртуелна па се не може само надјачати. m3 се не може дефинисати уопште јер је коначна и декларације и са и без override би се третирале као покушај надјачавања методе из основне класе, што не сме.

7. задатак

Која кључна реч мора да стоји испред назива деструктора полиморфне класе како би се деструктор изведене класе из те полиморфне класе позивао приликом уништавања динамичког објекта изведене класе преко показивача на основну коришћењем delete?

Одговор: виртуал

8. задатак

Руковаоц типа Р прихвата изузетак типа X ако:

  1. X је јавно изведено из Р
  2. X је приватно изведено из Р
  3. Р и X су исти тип
  4. Р је јавно изведено из X
  5. Р је приватно изведено из X

9. задатак

Генерички механизам је:

  1. динамички
  2. статички
  3. статички и динамички

10. задатак

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

#include <iostream>
using namespace std;

template <typename T>
void f(T p) { cout << 1; }

template <typename T>
void f(T* p) { cout << 2; }

template <>
void f(int* p) { cout << 3; }

int main() {
    int* p = nullptr;
    f(p);
    return 0;
}

Одговор: 3

Објашњење: Трећа декларација шаблона највише одговара задатим параметрима па се приликом превођења она бира.