ОО1/Питалице
На овој страници скупљени су разни испитни примери који су се можда појавили на испиту али им се не зна рок појављивања или једноставно није било довољно добро формулисаних питалица из тог рока како би се одвојили у страницу рока.
- За питања са више одговора, тачни одговори су подебљани и уоквирени.
- За питања за које се одговори уносе, тачни одговори су подвучени и сакривени: овако.
- Притисните на следеће дугме како бисте их сакрили или открили:
1. задатак
Шта је од наведеног тачно:
- Објекат јавно изведене класе наслеђује само имплементацију основне класе, а не и уговор
- Објекат заштићене изведене класе је једна врста објекта основне класе у свакој глобалној функцији
- Код приватног извођења наслеђује се уговор основне класе
- Јавним извођењем само се успоставља релација садржаја између објекта изведене класе и наслеђеног подобјекта основне класе
- Ништа од понуђеног
2. задатак
Шта исписује следећи код:
#include <iostream>
using namespace std;
template <typename T> class Klasa {
public:
template <typename U> void m (U u) { cout << "1"; }
void m (int u) {cout << "2"; }
};
template <typename T> class Klasa <T*> {
public:
template <typename U> void m (U u) { cout << "3"; }
void m (int u) {cout << "4"; }
};
int main () {
Klasa <int*>().m<float>(9);
Klasa <int> ().m(9);
Klasa <int> ().m('a');
Klasa <int*>().m<int>(2);
}
Одговор: 3213
3. задатак
Шта исписује следећи код:
#include <iostream>
using namespace std;
class Klasa {};
int main () {
try {
try {
cout << "0";
throw Klasa();
cout << "1";
}
catch (...) { cout << "2"; }
cout << "3";
}
catch (Klasa i) {cout << "4"; }
cout << "5";
return 0;
}
Одговор: 0235
4. задатак
Шта важи за апстрактне класе?
- не могу се правити објекти апстрактне класе зато што она не може имати деструктор
- наткласа апстрактне класе је обавезно апстрактна класа
- класа изведена из апстрактне класе мора да редефинише све наслеђене апстрактне методе
- не могу се стварати објекти апстрактне класе већ само показивачи и рефенце на њу, који могу показивати (упућивати) на објекте конкретних изведених класа које нису апстрактне
5. задатак
Шта исписује следећи код:
#include <iostream>
using namespace std;
void f() noexcept {}
void g() noexcept (!noexcept (f())) {}
void h() noexcept (noexcept (g())) {}
void m() noexcept (noexcept (f()) || noexcept (g())) {}
int main () {
cout << (noexcept (f()) ? 1:0);
cout << (noexcept (g()) ? 1:0);
cout << (noexcept (h()) ? 1:0);
cout << (noexcept (m()) ? 1:0);
return 0;
}
Одговор: 1001
6. задатак
Шта исписује дати програм:
#include <iostream>
using namespace std;
class A {
public:
static int i;
A() { i++; }
};
int A::i = 0;
class B : virtual public A {
public:
B() { i++; }
};
class C : public A {
public:
C() { i++; }
};
class D : public B, public C {
public:
void pisi() { cout << i; }
};
int main () {
D d;
d.pisi();
return 0;
}
Одговор: 4
7. задатак
Шта исписује следећи код:
#include <iostream>
using namespace std;
class A {
public:
virtual void m() {}
};
class B : public A {};
class C : public B {};
int main () {
A *pa = new B();
B *pb = new C();
B *b = dynamic_cast <B*>(pa);
C *c = dynamic_cast <C*> (pa);
C *d = dynamic_cast <C*> (pb);
if (b == nullptr) cout << 'b';
if (c == nullptr) cout << 'c';
if (d == nullptr) cout << 'd';
return 0;
}
- баца се изузетак бад_цаст
- д
- цд
- ц
- бцд
8. задатак
Шта исписује следећи код:
#include <iostream>
using namespace std;
class A {
public:
A(int i) {
if (i < 5) cout << 'a';
else throw 'b';
}
};
int main() {
int i = 1;
if (noexcept(A(i++))) cout << i;
else cout << 2*i;
return 0;
}
Одговор: 2
9. задатак
Заокружити исправне изразе, ако је дат следећи код:
template <typename T=int, int k=10>
class Niz { T niz[k]; };
Низ<инт*, 20> н1;Низ<инт*&, 20> н2;Низ<20> н3;Низ<> н4;Низ<доубле, 5.5> н5;Низ н6;
Напомена: Одговор под ф) се преводи само од C++17 и новијих стандарда.
10. задатак
Шта исписује следећи код:
#include <iostream>
using namespace std;
class O {};
class I: public O {};
int main() {
try {
throw I();
cout << "1";
}
catch(O o) {
cout << "5";
try {
throw I();
cout << "3";
}
catch(I i) { cout << "2"; }
}
catch(I i) { cout << "4"; }
cout << "8";
return 0;
}
Одговор: 528
11. задатак
Шта исписује следећи програм:
#include <iostream>
using namespace std;
class A {
public:
virtual void m1() = 0;
virtual void m2() = 0;
};
class B : public A {
public:
void m1() { cout << "1"; }
};
class C : public A {
public:
void m2() { cout << "2"; }
};
class D : public B, public C {
public:
void m2() { cout << "3"; }
};
int main(){
D d;
d.m2();
return 0;
}
Одговор: Не преводи се, D је апстрактна класа
12. задатак
Шта важи за основну и изведену класу, ако обе имају празна тела, а извођење је јавно:
- Изведена класа наслеђује конструктор
- Изведена класа не наслеђује деструктор
- Изведена класа има подразумевани конструктор са празним телом
- Изведена класа има деструктор који има празно тело
- Изведена класа има аутоматски генерисан копирајући конструктор
13. задатак
Шта исписује следећи програм:
#include <iostream>
using namespace std;
class X {
public:
X() {}
void m(int i) {
try {
if (i == 2) throw 2;
cout << "1" << endl;
}
catch (double k) { cout << "2" << endl; }
}
};
int main() {
X x;
try {
x.m(2);
}
catch (int k) { cout << "3" << endl; }
return 0;
}
Одговор: 3
14. задатак
Колико ће се звездица исписати?
#include <iostream>
using namespace std;
void f(int i, int& j) { i++; j++; }
int main(){
for (int i = 0, j = 0; i < 3 && j < 4; f(i, j))
cout << '*';
return 0;
}
Одговор: 4
15. задатак
Шта исписује следећи програм:
#include <iostream>
using namespace std;
class A {
int x, y;
public:
A(int xx, int yy) : x(xx) , y(yy){}
double div() { if (y == 0) throw x; return x/y; }
int mod() { if (y == 0) throw 0; return x % y; }
};
int main() {
A a(4, 0), aa(3, 5);
try { cout << a.div(); } catch(int x) { cout << x; }
try { cout << a.mod(); } catch(int x) { cout << x; }
try { cout << aa.div(); } catch(int x) { cout << x; }
try { cout << aa.mod(); } catch(int x) { cout << x; }
return 0;
}
Одговор: 4003
16. задатак
Заокружи тачна тврђења:
- Генеричке функције убрзавају извршавање програма
- Генеричке функције убрзавају превођење
- Генеричке функције и класе омогућавају бољу реупотребу кода
- Генерички механизам омогућава генерисање функција са различитим типовима параметара у току извршавања програма
17. задатак
Заокружи тачна тврђења:
template <typename T>
void swap (T *a, T *b){
T c;
for (int i = 0; i < n; i++) {
c = a[i];
a[i] = b[i];
b[i] = c;
}
}
За класу Т мора да постоји:
- Подразумевани конструктор
- Оператор доделе вредности
- Оператор []
- Копирајући конструктор
- Метода која врши полиморфну копију
18. задатак
Ако је еxцептион класа изузетака и из ње је изведена класа I, а из класе I даље изведена класа II, којим редоследом треба навести руковаоце изузецима (заокружити једно или више):
- еxцептион, I , II , ...
- II, I, еxцептион, ...
- I, II , еxцептион, ...
- II, I, ..., еxцептион
- ..., еxцептион, I, II
19. задатак
Шта исписује следећи програм:
#include <iostream>
using namespace std;
template<class T, class U, int I> struct X {
void f() { cout << "Osnovni sablon" << endl; }
};
template<class T, int I> struct X<T, T*, I> {
void f() { cout << "Specijalizacija 1" << endl; }
};
template<class T> struct X<int, T*, 10> {
void f() { cout << "Specijalizacija 2" << endl; }
};
int main() {
X<int, int*, 10> f;
f.f();
return 0;
}
- Специјализација 1
- Специјализација 2
- Грешка јер се приступа приватном пољу
- Грешка због двозначности шаблона
20. задатак
Шта исписује следећи програм:
#include <iostream>
using namespace std;
void fun(int p) {
try {
throw p;
}
catch (int p) { cout << ++p; throw; }
}
int main() {
int p = 1;
try {
try {
fun(p);
cout << ++p;
}
catch (int p) { cout << ++p; }
cout << ++p;
}
catch (int p) { cout << ++p; }
return 0;
}
Одговор: 222
21. задатак
Шта исписује следећи програм:
#include <iostream>
using namespace std;
int main() {
int x = 10;
double y = 1.5;
decltype(++x - y) a = y-- + 5;
cout << x << ' ' << y << ' ' << a;
return 0;
}
Одговор: 10 0.5 6.5
22. задатак
Шта исписује следећи програм:
#include <iostream>
using namespace std;
class Klasa {};
class Izvedena : public Klasa {};
int main() {
try {
throw Izvedena();
}
catch (Izvedena * i) { cout << "3"; }
catch (Klasa i) { cout << "4"; }
catch (Izvedena i) { cout << "5"; }
return 0;
}
Одговор: 4