ОО1/Јануар 2023
Ispit u januarskom roku 2023. godine održan je 27. januara i trajao je 20 minuta.
- За питања са више одговора, тачни одговори су подебљани и уоквирени
- За питања за које се одговори уносе, тачни одговори су подвучени и сакривени, тако да се прикажу када изаберете тај текст (пример: овако)
- Притисните лево дугме испод за сакривање и откривање свих одговора, или десно дугме за укључивање и искључивање интерактивног режима:
1. zadatak
Šta ispisuje navedeni isečak koda na jeziku 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;
}
- Program se ne prevodi.
- 777
- 222
- 555
- 722
Objašnjenje: I referenca r i pokazivač pok ukazuju na prvi element niza p.
2. zadatak
U kojim od navedenih funkcija klase K je pokazivač this tipa const *K const?
void f() constfriend f(const klasa& k)void f(const klasa& k) constvoid f(const klasa& k)const void f() const
Objašnjenje: Da bi this bio ovog tipa, funkcija mora da bude inspektor (da ima modifikator const). Prijateljske funkcije uopšte nemaju pokazivač this.
3. zadatak
Šta od sledećeg je moguće napraviti?
- Objekat klase koja sadrži apstraktni destruktor.
- Pokazivač na klasu koja ima apstraktni destruktor.
- Objekat klase koja sadrži samo virtuelne metode.
- Objekat klase koja sadrži virtuelni destruktor.
- ???
Objašnjenje: U odgovoru pod b) misli se na pokazivač tipa takve klase, koji može da pokazuje na objekat neke neapstraktne klase izvedene iz nje.
4. zadatak
Dati konstruktor je:
#include <iostream>
using namespace std;
class X {
int ii;
public:
X(int i, int ii=7);
};
- Konstruktor konverzije
- Kopirajući konstruktor
- Delegirajući konstruktor
- Podrazumevani konstruktor
- Ništa od navedenog
5. zadatak
Koji od navedenih metoda mogu biti virtuelni?
- Destruktor
- Konstruktor sa jednim parametrom tipa string
- Preklopljeni operator << (bitsko pomeranje ulevo)
- Preklopljeni operator delete
- Metod bez parametara
Objašnjenje: Odgovor pod c) je tačan jer je u pitanju šiftovanje a ne preklopleni ispis.
6. zadatak
Kako mora da izgleda definicija preklopljenog operatora + klase Racun da bi se dati program pokretao?
#include <iostream>
int main() {
Racun() + 100;
}
Racun& operator+(Racun &r, int b);Racun& operator+(int b)Racun& operator+(int b, Racun &r);friend Racun& operator+(Racun &r, int b)friend Racun& operator+(int b, Racun &r)
Objašnjenje: Treba voditi računa o redosledu i broju argumenata.
7. zadatak
Šta je moguće uraditi za navedene klase kako bi se program uspešno pokretao?
#include <iostream>
class A {};
class B: public A {};
A a; B b = aA *a = new AB b; A &a=bA &a = new B
8. zadatak
Šta ispisuje navedeni isečak koda na jeziku 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;
}
Rešenje: 045
Objašnjenje: Prvo će se ispisati 0 iz ugnježdenog try, a zatim se baca izuzetak tipa Klasa(). Pošto unutrašnji catch ne može to da uhvati, ceo segment koda do spoljašnjeg catch-a se preskače. Spoljašnji catch hvata izuzetak i program se na dalje normalno izvršava.
9. zadatak
Šta može stajati umesto ### kako bi se na izlazu ispisalo 0?
#include <iostream>
int x = 0;
namespace A {
int x = 3;
namespace B {
int x = 2;
void f() {
###
}
}
}
int main() {
A::B::f();
}
std::cout << x-2std::cout << :xstd::cout << ::xglobal x; std::cout << x;
Objašnjenje: Odgovor pod b) nije tačan jer :x ne pristupa ničemu. Odgovor pod d) nije tačan jer global kao ključna reč ne postoji u C++.
10. zadatak
Šta će se ispisati na izlazu nakon izvršavanja ovog programa?
#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);
}
Rešenje: baaaa[1]
Napomene
- ↑ Studenti koji su stavili 4/5 tačnih slova na odgovarajućim mestima dobili su 0.5 poena nakon prihvaćene molbe.