ОО1/К2 2023
Неки рок 20XX. године одржан је XX. месеца и трајао је XX.
- За питања са више одговора, тачни одговори су подебљани и уоквирени
- За питања за које се одговори уносе, тачни одговори су подвучени и сакривени, тако да се прикажу када изаберете тај текст (пример: овако)
- Притисните лево дугме испод за сакривање и откривање свих одговора, или десно дугме за укључивање и искључивање интерактивног режима:
1. задатак
Које од следећих оператора је могуће преклопити за класне типове?
- () (оператор за позив функција)
- -> (оператор за посредан приступ члановима класе преко показивача)
- ?: (оператор за условни израз)
- :: (оператор за разрешење досеа)
- . (оператор за приступ члану класе)
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++?
- Уколико не постоји премештајућа варијанта оператора додела (суспендована је и имплицитна премештајућа додела) у случају када је десни операнд нестајућа вредност (енг. еxпиринг валуе), користиће се постојећа копирајућа варијанта оператора доделе
- Уколико оператор није експлицитно дефинисан, на месту позива оператора ће се позвати конструктор копије
- Постоји копирајућа и премештајућа варијанта оператора =
- Оператор је могуће преклопити као нестатички метод класе
- Оператор је могуће преклопити као глобалну пријатељску функцију
4. задатак
Које од наведених особина су заједничке за преклапање оператора -> и префиксног ++ оператора?
- Преклапањем је моуће променити приоритет оператора
- Преклапају се као бинарни оператори
- Преклапају се као унарни оператори
- Морају да се преклопе као статички метод клсе
- Тип резултата мора бити једнак типу операнда
5. задатак
Које тврдње су тачне за програмски језик C++?
- Приликом конструкције објекта једноструко изведене класе прво се изврашава тело конструктора изведене класе
- Конструктор једноструко изведене класе који није делегирајући мора у листи иницијализатора имати иницијализатор основне класе уколико основна класа нема подразумевани конструктор
- Уколико основна класа има подразумевани конструктор, тада се никада неће извршавати ниједан конструктор основне класе приликом конструкције објекта изведене класе.
- Уколико основна класа има доступан подразумевани конструктор, тада је могуће дефинисати конструктор изведене класе са празном листом иницијализатора
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();
}
Изаберите један одговор:
- 2
- Дати програм се не преводи
- 3
- 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;
}
Изаберите један или више одговора одговор:
- воид *м(А &а) оверриде {ретурн неw Б();}
- А *м(А &а) {ретурн неw Б();}
- Б *м(Б &б) оверриде {ретурн неw Б();}
- Б *м(А &а) оверриде {ретурн неw Б();}
- А *м(Б &б) {ретурн неw Б();}
Објашњење: Ако се реди надјачавање (оверриде) потпис метода мора бити идентилан осим повратне вредности, која ако је била показивач или референца на основну класу у основном методу, у надјачаном методу може бити референца или показивач на изведену класу у надјачаној методи. Ако нема кључне речи оверриде онда се ради о преклапању имена и потпис може бити произвољан.
2. задатак
Овако изгледа задатак са више тачних одговора од више понуђених (одговори 1 и 3 су означени као тачни).
- Одговор 1
- Одговор 2
- Одговор 3
- Одговор 4
3. задатак
Овако изгледају задаци са одговорима понуђеним у падајућем менију.
- Понуђено 1 Одговор 2
- Понуђено 2 Одговор 1
- Понуђено 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. задатак
Напомене
- ↑ Овако изгледа једна напомена.