ОО1/К2 2023

Извор: SI Wiki
< ОО1
Датум измене: 7. децембар 2023. у 22:03; аутор: KockaAdmiralac (разговор | доприноси) (KockaAdmiralac преместио је страницу OO2/К2 2023 на ОО1/К2 2023 без остављања преусмерења: Pogrešan predmet)
Пређи на навигацију Пређи на претрагу

Неки рок 20XX. године одржан је XX. месеца и трајао је XX.

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


1. задатак

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

  1. () (оператор за позив функција)
  2. -> (оператор за посредан приступ члановима класе преко показивача)
  3. ?: (оператор за условни израз)
  4. :: (оператор за разрешење досеа)
  5. . (оператор за приступ члану класе)

2. задатак

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

Напомена 1: Унарна варијанта оператора * има виши приоритет у односу на бинарну

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

#include <iostream>
using namespace std;
class A {
public:
    friend const A& operator *(const A& a) {
        cout << "1";
        return a;
    }
    friend const A& operator*(const A &a1, const A& a2) {
        cout << "2";
        return a1;
    }
};
int main() {
    A x;
    A *y = &x;
    A **z = &y;
    *x**y***z;
    return 0;
}

Одговор: 122 Објашњење: Дати израз се евалуира као: (*x) * (*y) * (**з). Само у *x случају се позива унарни * над цонст А&, а у осталим подизразима имамо преклопљен бинарни оператор * над две цонст А&

3. задатак

Шта важи за оператор = на језику C++?

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

4. задатак

Које од наведених особина су заједничке за преклапање оператора -> и префиксног ++ оператора?

  1. Преклапањем је моуће променити приоритет оператора
  2. Преклапају се као бинарни оператори
  3. Преклапају се као унарни оператори
  4. Морају да се преклопе као статички метод клсе
  5. Тип резултата мора бити једнак типу операнда

5. задатак

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

  1. Приликом конструкције објекта једноструко изведене класе прво се изврашава тело конструктора изведене класе
  2. Конструктор једноструко изведене класе који није делегирајући мора у листи иницијализатора имати иницијализатор основне класе уколико основна класа нема подразумевани конструктор
  3. Уколико основна класа има подразумевани конструктор, тада се никада неће извршавати ниједан конструктор основне класе приликом конструкције објекта изведене класе.
  4. Уколико основна класа има доступан подразумевани конструктор, тада је могуће дефинисати конструктор изведене класе са празном листом иницијализатора

6. задатак

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

#include <iostream>
using namespace std;
class A {
protected:
    int k;
public:
    A(int kk) : k(kk++) {
        k = ++kk;
    }
};
class B : public A {
public:
    B(int kk) : A(kk) { k = kk; }
    int dohvatiK() { return k; }
};
int main() {
    B b(2);
    cout << b.dohvatiK();
}

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

  1. 2
  2. Дати програм се не преводи
  3. 3
  4. 4

Објашњење: Када се позива конструктор класе А, њему се прослеђује копија вредност кк, па никакви бочни ефекти немају утицај на кк из конструктора Б. Затим се у телу конструктора Б к иницијализује на кк, чиме се гази било каква додела из конструктора А, јер к је заштићен члан па је доступан и у класи А и у класи Б

6. задатак

За дати код написанна програмском језику C++ одредити за које дефиниције метода м у класи Б ће се наведени програм исправно извршавати (бити без грешке у превођењу и извршавању, игнорисати цурење меморије)

#include <iostream>
using namespace std;
class A {
public:
    virtual A* m(A& a) {return new A();}
};
class B : public A {
public:
    // ovde nedostaje definicija metoda m
};
int main() {
    B b;
    b.m(b);
    return 0;
}

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

  1. воид *м(А &а) оверриде {ретурн неw Б();}
  2. А *м(А &а) {ретурн неw Б();}
  3. Б *м(Б &б) оверриде {ретурн неw Б();}
  4. Б *м(А &а) оверриде {ретурн неw Б();}
  5. А *м(Б &б) {ретурн неw Б();}

Објашњење: Ако се реди надјачавање (оверриде) потпис метода мора бити идентилан осим повратне вредности, која ако је била показивач или референца на основну класу у основном методу, у надјачаном методу може бити референца или показивач на изведену класу у надјачаној методи. Ако нема кључне речи оверриде онда се ради о преклапању имена и потпис може бити произвољан.

2. задатак

Овако изгледа задатак са више тачних одговора од више понуђених (одговори 1 и 3 су означени као тачни).

  1. Одговор 1
  2. Одговор 2
  3. Одговор 3
  4. Одговор 4

3. задатак

Овако изгледају задаци са одговорима понуђеним у падајућем менију.

  1. Понуђено 1 Одговор 2
  2. Понуђено 2 Одговор 1
  3. Понуђено 3 Одговор 3

4. задатак

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

class Main {
    public static void main(String[] args) {
        System.out.println("Ovako izgleda blok koda.");
    }
}

Одговор: Одговор на питање изнад иде овде

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

5. задатак

У задатку може да постоји напомена на поставку или решење задатка.[1]

6. задатак

7. задатак

8. задатак

9. задатак

10. задатак

Напомене

  1. Овако изгледа једна напомена.