ОО1/Јануар 2023

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

Испит у јануарском року 2023. године одржан је 27. јануара и трајао је 20 минута.

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

1. задатак

Шта исписује наведени исечак кода на језику C++?

#include <iostream>

using namespace std;

int main() {
    auto p = new int(5);
    int &r = *p;
    int *pok = p;
    r = 7;
    p[0] = 2;
    cout << r << *p << *pok;
}
  1. Програм се не преводи.
  2. 777
  3. 222
  4. 555
  5. 722

Објашњење: I референца r и показивач pok указују на први елемент низа п.

2. задатак

У којим од наведених функција класе К је показивач this типа const *K const?

  1. воид ф() цонст
  2. фриенд ф(цонст класа& к)
  3. воид ф(цонст класа& к) цонст
  4. воид ф(цонст класа& к)
  5. цонст воид ф() цонст

Објашњење: Да би тхис био овог типа, функција мора да буде инспектор (да има модификатор const). Пријатељске функције уопште немају показивач this.

3. задатак

Шта од следећег је могуће направити?

  1. Објекат класе која садржи апстрактни деструктор.
  2. Показивач на класу која има апстрактни деструктор.
  3. Објекат класе која садржи само виртуелне методе.
  4. Објекат класе која садржи виртуелни деструктор.
  5. ???

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

4. задатак

Дати конструктор је:

#include <iostream>

using namespace std;

class X {
   int ii;
public:
   X(int i, int ii=7);
};
  1. Конструктор конверзије
  2. Копирајући конструктор
  3. Делегирајући конструктор
  4. Подразумевани конструктор
  5. Ништа од наведеног

5. задатак

Који од наведених метода могу бити виртуелни?

  1. Деструктор
  2. Конструктор са једним параметром типа стринг
  3. Преклопљени оператор << (битско померање улево)
  4. Преклопљени оператор делете
  5. Метод без параметара

Објашњење: Одговор под ц) је тачан јер је у питању шифтовање а не преклоплени испис.

6. задатак

Како мора да изгледа дефиниција преклопљеног оператора + класе Racun да би се дати програм покретао?

#include <iostream>

int main() {
   Racun() + 100;
}
  1. Рацун& оператор+(Рацун &р, инт б);
  2. Рацун& оператор+(инт б)
  3. Рацун& оператор+(инт б, Рацун &р);
  4. фриенд Рацун& оператор+(Рацун &р, инт б)
  5. фриенд Рацун& оператор+(инт б, Рацун &р)

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

7. задатак

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

#include <iostream>

class A {};
class B: public A {};
  1. А а; Б б = а
  2. А *а = неw А
  3. Б б; А &а=б
  4. А &а = неw Б

8. задатак

Шта исписује наведени исечак кода на језику C++?

#include <iostream>

using namespace std;

class Klasa {};

int main() {
    try {
        try {
            cout << 0;
            throw Klasa();
            cout << 1;
        }
        catch(int i) {cout << 2;}
        cout << 3;
    }
    catch(Klasa k) {cout << 4;}
    cout << 5;
    return 0;
}

Решење: 045

Објашњење: Прво ће се исписати 0 из угњежденог трy, а затим се баца изузетак типа Класа(). Пошто унутрашњи цатцх не може то да ухвати, цео сегмент кода до спољашњег цатцх-а се прескаче. Спољашњи цатцх хвата изузетак и програм се на даље нормално извршава.

9. задатак

Шта може стајати уместо ### како би се на излазу исписало 0?

#include <iostream>

int x = 0;
namespace A {
    int x = 3;
    namespace B {
        int x = 2;
        void f() {
            ###
        }
    }
}

int main() {
    A::B::f();
}
  1. стд::цоут << x-2
  2. стд::цоут << :x
  3. стд::цоут << ::x
  4. глобал x; стд::цоут << x;

Објашњење: Одговор под б) није тачан јер :x не приступа ничему. Одговор под д) није тачан јер глобал као кључна реч не постоји у C++.

10. задатак

Шта ће се исписати на излазу након извршавања овог програма?

#include <iostream>
using namespace std;

template <typename T, typename U> void f(T t, U u) {cout << 'a';}

void f(int i, double d) {cout << 'b';}

int main() {
    f(1, 2.0);
    f(1, 1);
    f<int, int>(1, 2.0);
    f<>(1, 2.0);
    f(1.0, 2.0);
}

Решење: баааа[1]

Напомене

  1. Студенти који су ставили 4/5 тачних слова на одговарајућим местима добили су 0.5 поена након прихваћене молбе.