ОО1/Јануар 2023
Испит у јануарском року 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;
}
- Програм се не преводи.
- 777
- 222
- 555
- 722
Објашњење: I референца r и показивач pok указују на први елемент низа п.
2. задатак
У којим од наведених функција класе К је показивач this типа const *K const?
воид ф() цонстфриенд ф(цонст класа& к)воид ф(цонст класа& к) цонствоид ф(цонст класа& к)цонст воид ф() цонст
Објашњење: Да би тхис био овог типа, функција мора да буде инспектор (да има модификатор const). Пријатељске функције уопште немају показивач this.
3. задатак
Шта од следећег је могуће направити?
- Објекат класе која садржи апстрактни деструктор.
- Показивач на класу која има апстрактни деструктор.
- Објекат класе која садржи само виртуелне методе.
- Објекат класе која садржи виртуелни деструктор.
- ???
Објашњење: У одговору под б) мисли се на показивач типа такве класе, који може да показује на објекат неке неапстрактне класе изведене из ње.
4. задатак
Дати конструктор је:
#include <iostream>
using namespace std;
class X {
int ii;
public:
X(int i, int ii=7);
};
- Конструктор конверзије
- Копирајући конструктор
- Делегирајући конструктор
- Подразумевани конструктор
- Ништа од наведеног
5. задатак
Који од наведених метода могу бити виртуелни?
- Деструктор
- Конструктор са једним параметром типа стринг
- Преклопљени оператор << (битско померање улево)
- Преклопљени оператор делете
- Метод без параметара
Објашњење: Одговор под ц) је тачан јер је у питању шифтовање а не преклоплени испис.
6. задатак
Како мора да изгледа дефиниција преклопљеног оператора + класе Racun да би се дати програм покретао?
#include <iostream>
int main() {
Racun() + 100;
}
Рацун& оператор+(Рацун &р, инт б);Рацун& оператор+(инт б)Рацун& оператор+(инт б, Рацун &р);фриенд Рацун& оператор+(Рацун &р, инт б)фриенд Рацун& оператор+(инт б, Рацун &р)
Објашњење: Треба водити рачуна о редоследу и броју аргумената.
7. задатак
Шта је могуће урадити за наведене класе како би се програм успешно покретао?
#include <iostream>
class A {};
class B: public A {};
А а; Б б = аА *а = неw АБ б; А &а=бА &а = не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();
}
стд::цоут << x-2стд::цоут << :xстд::цоут << ::xглобал 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]
Напомене
- ↑ Студенти који су ставили 4/5 тачних слова на одговарајућим местима добили су 0.5 поена након прихваћене молбе.