ОО1/Јануар 2022
- За питања са више одговора, тачни одговори су подебљани и уоквирени
- За питања за које се одговори уносе, тачни одговори су подвучени и сакривени, тако да се прикажу када изаберете тај текст (пример: овако)
- Притисните лево дугме испод за сакривање и откривање свих одговора, или десно дугме за укључивање и искључивање интерактивног режима:
Г1
1. задатак
Шта је тачно за наведени исечак кода на језику C++?
#include <iostream>
using namespace std;
int main() {
int niz[] = { 1, 2, 3 };
int i;
cin >> i;
cout << niz[i];
}
- Постоји проблем цурења меморије.
- Низ има тачно 3 елемената.
- Постоји проблем са висећим показивачем.
- Ако се на стандардни улаз упише 1, програм ће исписати 1.
2. задатак
Шта је могуће ставити уместо ??? на овом исечку кода на језику C++?
#include <iostream>
using namespace std;
int main() {
char slova[] = "slova";
char* const pk = slova;
???
}
pk++;(*pk)++;pk = "xyz";char c = pk[1];pk[0] = 'a';
Објашњење: pk је константни показивач на цхар што значи да не може да се промени на шта он показује, тако да су први и трећи одговори нетачни. Други и пети одговори су тачни јер је само показивач константан, а не променљива на коју показује.
3. задатак
Шта је могуће ставити уместо ??? на овом исечку кода на језику C++?
#include <iostream>
using namespace std;
class X {
int a;
public:
static int y;
int b;
private:
static int x;
};
int X::y = 1;
int X::x = 2;
int main() {
X obj;
???
}
obj.a = 5;obj.b = 5;obj.y = 5;obj.x = 5;X::y = 5;
4. задатак
Шта исписује следећи код на програмском језику C++?
#include <iostream>
using namespace std;
class X {
public:
static X&& kreiraj() { X* pk = new X(); return static_cast<X&&>(*pk); }
void metod()& { cout << 1; }
void metod()&& { cout << 2; }
};
int main() {
X x;
x.metod();
X::kreiraj().metod();
}
- Програм се не преводи.
- 1
- 11
- 12
- 21
5. задатак
Шта исписује следећи код на програмском језику C++?
#include <iostream>
using namespace std;
class A {
public:
A() { cout << "0"; }
};
class B{
A a;
public:
B() { cout << "1"; }
};
class C : public B {
A a;
public:
C() { cout << "2"; }
};
int main() {
C c;
}
- Програм се не преводи.
- 0120
- 0102
- Ниједан од понуђених одговора.
6. задатак
Шта је тачно од следећих навода о преклапању оператора на језику C++?
- Ако се преклопи оператор
newгуби се подразумевани конструктор. - Када се преклапа
(), оператор може да прими произвољно параметара али сви морају да буду стандардног типа. - Функцијска класа је класа која преклапа барем један од оператора
() [] ->. - Класа може имати више преклопњених
newоператора. newоператор се преклапа као статички метод.
7. задатак
Шта је тачно од следећих навода о апстрактним класама на језику C++?
- Апстрактна класа је она која има барем једну апстрактну методу.
- Статички метод може да буде апстрактан.
- Класа може бити апстрактна ако су јој деструктор и све методе конкретне.
- Да би изведена класа била конкретна, мора да конкретизује све апстрактне методе.
- Апстрактна класа се означава са
abstractу дефиницији преclass.
8. задатак
Шта је тачно од следећих навода о шаблонским класама на језику C++?
- Може се изводити из шаблонских класа.
- Шаблонска класа не може имати виртуелне методе.
- Шаблонски методи не могу бити виртуелни.
- ??
- ??
9. задатак
Шта је тачно од следећих навода о виртуелним методама на језику C++?
- Деструктор може да буде виртуелан.
- Конструктор може да буде виртуелан.
- Статички метод може да буде виртуелан.
- Пријатељска глобална функција може бити виртуелна.
- Нестатички метод може да буде виртуелан.
10. задатак
Шта је тачно од следећих навода о руковаоцима изузетака на језику C++?
- Руковалац типа
doubleможе да прихвати изузетке типаint. - Руковалац типа
...прихвата све типове изузетака. - Руковалац типа
intможе да прихвати изузетке типаdouble. - Изузетак може да се баци из
tryблока. - Изузетак не може да се баци из
catchблока.
Г3
1. задатак
Шта исписује следећи сегмент кода написан на програмском језику C++?
#include <iostream>
using namespace std;
int i = 7;
int main() {
for(int i = 0; i < 3; i++) {
if(int i = 1) {
cout << i;
}
}
cout << i;
return 0;
}
Одговор: 1117
2. задатак
Шта може да стоји уместо #### да би се код написан на језику C++ успешно превео?
#include <iostream>
int main() {
int a = 1, b = 2;
int * const p = &a;
####
}
Изаберите један или више одговора:
p++;*p = 1;p = &b;std::cout << p;std::cout << *p;
3. задатак
Шта исписује следећи програм написан на језику C++?
#include <iostream>
using namespace std;
class Klasa {
public:
void metoda() & { cout << "1"; }
void metoda() && { cout << "2"; }
};
int main(){
Klasa &&dRef = Klasa();
dRef.metoda();
return 0;
}
Одговор: 1
4. задатак
Уколико су дате следеће датотеке "X.х" и "маин.цпп":
// datoteka X.h
class X {
int a;
private:
static int b;
public:
static int c;
int d;
};
// datoteka main.cpp
#include "X.h"
int X::b = 1;
int X::c = 1;
int main() {
X y;
***
}
која од ових наведених наредби исправно замењује ***? Изаберите један или више одговора:
y.b = 2;X::c = 5;y.a = 1;X::d = 3;y.d = 4;
5. задатак
Шта од следећег важи за преклапање оператора на програмском језику C++?
Изаберите један или више одговора:
- Уколико је леви операнд бинарне операције стандардног типа мора се преклопити као метод одговарајуће класе.
- Оператор
[]се мора преклопити као глобална пријатељска функција. - Оператор доделе се мора преклопити као нестатички метод класе.
- Оператор
()се мора преклопити као нестатички метод класе. - Бинарни оператор
+је могуће преклопити и као метод класе и као глобалну пријатељску функцију.
6. задатак
Шта од следећег важи за извођење на програмском језику C++?
Изаберите један или више одговора:
- Објекти изведене класе садрже безимени подобјекат основне класе.
- Преко објеката изведене класе заштићеним члановима основне класе се приступа исто као јавним члановима изведене класе.
- Језици који подржавају извођење се називају објектно базирани језици.
- Модификатор
finalсе користи за класу која није изведена ни из једне класе. - Када се нека класа изведе из класе X, потребно је извршити поновно превођење класе X.
7. задатак
Шта исписује следећи програм?
#include <iostream>
using namespace std;
class B {
public:
B() { std::cout << "b"; }
};
class X : virtual public B {
public:
X() { std::cout << "x"; }
};
class Y : virtual public B {
public:
Y() { std::cout << "y"; }
};
class Z : public X, public Y {
public:
Z() { std::cout << "z"; }
};
int main() {
Z z;
}
Изаберите један одговор:
- бxyз
- бxбyз
- бyxз
- бyбxз
- Програм се не преводи.
8. задатак
Које тврдње у вези оператора за динамичку конверзију (dynamic_cast) су тачне?
Изаберите један или више одговора:
- Оператор за динамичку конверзију примењен на референцу типа основне класе при неуспешној конверзији у референцу на изведену класу баца изузетак типа
bad_cast. - Оператор за динамичку конверзију се мора примењивати за сваку конверзију навише (
upcast) која се врши у време извршења програма. - Оператор за динамичку конверзију се може применити на показивач или референцу на објекат неполиморфне основне класе.
- Оператор за динамичку конверзију примењен на показивач типа основне класе враћа
nullptrако конверзија у показивач типа изведене класе не успева. - Оператор за динамичку конверзију гарантује да ће се конверзија у време извршења правилно извршити и да ће објекат бити конвертован у циљни објекат.
9. задатак
Ако су I1, I2, I3 и I4 класе изузетака и ако је у основној класи A декларисан метод:
virtual void m() throw (I1, I2, I3);
декларација метода m() у изведеној класи B може да буде:
Изаберите један или више одговора:
void m() noexcept;void m() throw ();void m() throw (I1, I2, I3);void m() throw (I1);void m() throw (I2, I4);
10. задатак
Ако је генеричка класа дефинисана на следећи начин:
template <class T> class K { void m(T t); };
метод m може да буде дефинисан изван класе K на следећи начин:
Изаберите један одговор:
void K::m(T t) { ... }template <class T> void K<T>::m(T t) { ... }void K<T>::m(T t) { ... }