ОО1/Јануар 2021 — разлика између измена
м (Ovo izgleda lepše) |
м (→8. zadatak: Gramatička greška.) |
||
| (Није приказано 7 међуизмена 2 корисника) | |||
| Ред 1: | Ред 1: | ||
{{tocright}} | {{tocright}} | ||
{{rešenja}} | |||
== 1. zadatak == | == 1. zadatak == | ||
Povežite tipove objekata sa njihovim životnim vekovima. | Povežite tipove objekata sa njihovim životnim vekovima. | ||
{| class="wikitable" | {| class="wikitable" | ||
|+ | |+ Date opcije | ||
! Tip objekta | |||
! Životni vek | |||
|- | |||
| | | | ||
<div data-solution="select" data-options="a,b,c,d,e,f"> | |||
# Dinamički objekat <span class="spoiler">e</span> | |||
# Statički objekat <span class="spoiler">a</span> | |||
# Automatski objekat <span class="spoiler">d</span> | |||
# Privremeni objekat <span class="spoiler">b</span> | |||
</div> | |||
| <div class="abc-list"> | | <div class="abc-list"> | ||
# Od definicije do kraja glavne funkcije | # Od definicije do kraja glavne funkcije | ||
# Kratak i nedefinisan | # Kratak i nedefinisan | ||
# | # Nepostojan | ||
# Od definicije do kraja oblasti važenja | # Od definicije do kraja oblasti važenja | ||
# Neposredno kontroliše programer | # Neposredno kontroliše programer | ||
# Određuje prevodilac | |||
</div> | </div> | ||
|} | |} | ||
| Ред 41: | Ред 45: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
'''Odgovor:''' <span class="spoiler">222</span> | '''Odgovor:''' <span class="spoiler" data-solution="text">222</span> | ||
'''Objašnjenje:''' <span class="spoiler"><code>decltype(f(++a))</code> se prevodi kao tip <code>int&</code> jer je to povratna vrednost funkcije <code>f</code>, ali se samo <code>f(++a)</code> ne izvršava, tako da <code>a</code> ostaje nepromenjeno a <code>b</code> postaje referenca na <code>a</code>. <code>auto</code> obično ne zadržava referencu, ali pošto je ovde napisano <code>auto &c</code> to znači da će <code>c</code> sigurno biti referenca na povratnu vrednost funkcije, tako da i <code>c</code> postaje referenca na <code>a</code>. Nakon toga se dvaput inkrementira <code>a</code> i ispisuju tri iste vrednosti (2), jer sve ti promenljive pokazuju na istu.</span> | '''Objašnjenje:''' <span class="spoiler" data-solution="explanation"><code>decltype(f(++a))</code> se prevodi kao tip <code>int&</code> jer je to povratna vrednost funkcije <code>f</code>, ali se samo <code>f(++a)</code> ne izvršava, tako da <code>a</code> ostaje nepromenjeno a <code>b</code> postaje referenca na <code>a</code>. <code>auto</code> obično ne zadržava referencu, ali pošto je ovde napisano <code>auto &c</code> to znači da će <code>c</code> sigurno biti referenca na povratnu vrednost funkcije, tako da i <code>c</code> postaje referenca na <code>a</code>. Nakon toga se dvaput inkrementira <code>a</code> i ispisuju tri iste vrednosti (2), jer sve ti promenljive pokazuju na istu.</span> | ||
== 3. zadatak == | == 3. zadatak == | ||
| Ред 55: | Ред 59: | ||
}; | }; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<div class="abc-list"> | <div class="abc-list" data-solution="multiple"> | ||
# Klasa A ima implicitno definisani podrazumevani konstruktor. | # Klasa A ima implicitno definisani podrazumevani konstruktor. | ||
# | # Klasa A ima samo jedan konstruktor. | ||
# Objekat klase A se može stvoriti pozivanjem konstruktora koji nema nijedan parametar. | # Objekat klase A se može stvoriti pozivanjem konstruktora koji nema nijedan parametar. | ||
# <span class="solution">Objekat klase A se može stvoriti pozivanjem konstruktora koji ima jedan argument.</span> | # <span class="solution">Objekat klase A se može stvoriti pozivanjem konstruktora koji ima jedan argument.</span> | ||
# Klasa A nema podrazumevani konstruktor. | # <span class="solution">Klasa A nema podrazumevani konstruktor.</span> | ||
</div> | </div> | ||
'''Objašnjenje:''' <span class="spoiler">Pošto je napravljen konverzioni konstruktor, više ne postoji implicitno definisani podrazumevani konstruktor, ali i dalje postoje implicitno definisani kopirajući i premeštajući.</span> | '''Objašnjenje:''' <span class="spoiler" data-solution="explanation">Pošto je napravljen konverzioni konstruktor, više ne postoji implicitno definisani podrazumevani konstruktor, ali i dalje postoje implicitno definisani kopirajući i premeštajući.</span> | ||
== 4. zadatak == | == 4. zadatak == | ||
| Ред 89: | Ред 93: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<div class="abc-list"> | <div class="abc-list" data-solution="multiple"> | ||
# <syntaxhighlight lang="cpp" inline>K::E* e = K::novi(5); cout << e->n;</syntaxhighlight> | # <syntaxhighlight lang="cpp" inline>K::E* e = K::novi(5); cout << e->n;</syntaxhighlight> | ||
# <span class="solution"><syntaxhighlight lang="cpp" inline>void* e = K::novi(5);</syntaxhighlight></span> | # <span class="solution"><syntaxhighlight lang="cpp" inline>void* e = K::novi(5);</syntaxhighlight></span> | ||
| Ред 96: | Ред 100: | ||
# <span class="solution"><syntaxhighlight lang="cpp" inline>K::novi(5);</syntaxhighlight></span> | # <span class="solution"><syntaxhighlight lang="cpp" inline>K::novi(5);</syntaxhighlight></span> | ||
</div> | </div> | ||
'''Objašnjenje:''' <span class="spoiler"><code>E</code> se nalazi u privatnoj sekciji klase <code>K</code> tako da se tom imenu ne može pristupiti. S druge strane, svi pokazivači imaju istu veličinu, pa je zato vraćeni pokazivač moguće dodeliti promenljivoj pokazivačkog tipa na <code>void</code>.</span> | '''Objašnjenje:''' <span class="spoiler" data-solution="explanation"><code>E</code> se nalazi u privatnoj sekciji klase <code>K</code> tako da se tom imenu ne može pristupiti. S druge strane, svi pokazivači imaju istu veličinu, pa je zato vraćeni pokazivač moguće dodeliti promenljivoj pokazivačkog tipa na <code>void</code>.</span> | ||
== 5. zadatak == | == 5. zadatak == | ||
Koliko argumenata mogu prihvatati sledeći operatori ukoliko se preklapaju kao nestatičke metode: | Koliko argumenata mogu prihvatati sledeći operatori ukoliko se preklapaju kao nestatičke metode: | ||
{| class="wikitable" | {| class="wikitable" | ||
|+ Operatori | |+ Date opcije | ||
! Operatori | |||
! Broj argumenata | |||
|- | |||
| | | | ||
<div data-solution="select" data-options="a,b,c,d,e"> | |||
# <code>operator!</code> <span class="spoiler">a</span> | |||
# <code>operator/</code> <span class="spoiler">b</span> | |||
# <code>operator()</code> <span class="spoiler">d</span> | |||
<div> | |||
| <div class="abc-list"> | | <div class="abc-list"> | ||
# 0 | # 0 | ||
| Ред 129: | Ред 138: | ||
}; | }; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<div class="abc-list"> | <div class="abc-list" data-solution="multiple"> | ||
# <span class="solution"><syntaxhighlight lang="cpp" inline>void m1() { }</syntaxhighlight></span> | # <span class="solution"><syntaxhighlight lang="cpp" inline>void m1() { }</syntaxhighlight></span> | ||
# <span class="solution"><syntaxhighlight lang="cpp" inline>void m2() { }</syntaxhighlight></span> | # <span class="solution"><syntaxhighlight lang="cpp" inline>void m2() { }</syntaxhighlight></span> | ||
| Ред 137: | Ред 146: | ||
# Ništa od navedenog | # Ništa od navedenog | ||
</div> | </div> | ||
'''Objašnjenje:''' <span class="spoiler"><code>m1</code> može da se nađe u izvedenoj klasi i sa <code>override</code> i bez jer je virtuelna, slaže se potpis i može se nadjačati. <code>m2</code> može da se nađe u izvedenoj klasi bez <code>override</code>, jer se tako sakriva metod iz osnovne klase, ali ne može sa <code>override</code> jer nije virtuelna pa se ne može samo nadjačati. <code>m3</code> se ne može definisati uopšte jer je konačna i deklaracije i sa i bez <code>override</code> bi se tretirale kao pokušaj nadjačavanja metode iz osnovne klase, što ne sme.</span> | '''Objašnjenje:''' <span class="spoiler" data-solution="explanation"><code>m1</code> može da se nađe u izvedenoj klasi i sa <code>override</code> i bez jer je virtuelna, slaže se potpis i može se nadjačati. <code>m2</code> može da se nađe u izvedenoj klasi bez <code>override</code>, jer se tako sakriva metod iz osnovne klase, ali ne može sa <code>override</code> jer nije virtuelna pa se ne može samo nadjačati. <code>m3</code> se ne može definisati uopšte jer je konačna i deklaracije i sa i bez <code>override</code> bi se tretirale kao pokušaj nadjačavanja metode iz osnovne klase, što ne sme.</span> | ||
== 7. zadatak == | == 7. zadatak == | ||
Koja ključna reč mora da stoji ispred naziva destruktora polimorfne klase kako bi se destruktor izvedene klase iz te polimorfne klase pozivao prilikom uništavanja dinamičkog objekta izvedene klase preko pokazivača na osnovnu korišćenjem <code>delete</code>? | Koja ključna reč mora da stoji ispred naziva destruktora polimorfne klase kako bi se destruktor izvedene klase iz te polimorfne klase pozivao prilikom uništavanja dinamičkog objekta izvedene klase preko pokazivača na osnovnu korišćenjem <code>delete</code>? | ||
'''Odgovor:''' <span class="spoiler">virtual</span> | '''Odgovor:''' <span class="spoiler" data-solution="text">virtual</span> | ||
== 8. zadatak == | == 8. zadatak == | ||
Rukovalac tipa R prihvata izuzetak tipa X ako: | |||
<div class="abc-list"> | <div class="abc-list" data-solution="multiple"> | ||
# <span class="solution">X je javno izvedeno iz R</span> | # <span class="solution">X je javno izvedeno iz R</span> | ||
# X je privatno izvedeno iz R | # X je privatno izvedeno iz R | ||
| Ред 156: | Ред 165: | ||
== 9. zadatak == | == 9. zadatak == | ||
Generički mehanizam je: | Generički mehanizam je: | ||
<div class="abc-list"> | <div class="abc-list" data-solution="single"> | ||
# dinamički | # dinamički | ||
# <span class="solution">statički</span> | # <span class="solution">statički</span> | ||
| Ред 183: | Ред 192: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
'''Odgovor:''' <span class="spoiler">3</span> | '''Odgovor:''' <span class="spoiler" data-solution="text">3</span> | ||
'''Objašnjenje:''' <span class="spoiler">Treća deklaracija šablona najviše odgovara zadatim parametrima pa se prilikom prevođenja ona bira.</span> | '''Objašnjenje:''' <span class="spoiler" data-solution="explanation">Treća deklaracija šablona najviše odgovara zadatim parametrima pa se prilikom prevođenja ona bira.</span> | ||
[[Категорија:Рокови]] | [[Категорија:Рокови]] | ||
[[Категорија:ОО1]] | [[Категорија:ОО1]] | ||
Тренутна верзија на датум 22. фебруар 2026. у 21:00
- За питања са више одговора, тачни одговори су подебљани и уоквирени
- За питања за које се одговори уносе, тачни одговори су подвучени и сакривени, тако да се прикажу када изаберете тај текст (пример: овако)
- Притисните лево дугме испод за сакривање и откривање свих одговора, или десно дугме за укључивање и искључивање интерактивног режима:
1. zadatak
Povežite tipove objekata sa njihovim životnim vekovima.
| Tip objekta | Životni vek |
|---|---|
|
|
2. zadatak
Šta ispisuje sledeći kod na programskom jeziku C++?
#include <iostream>
int& f(int & param) {
return param;
}
int main() {
int a = 0;
decltype(f(++a)) b = f(a);
auto &c = f(a);
b++;
c++;
std::cout << a << b << c;
return 0;
}
Odgovor: 222
Objašnjenje: decltype(f(++a)) se prevodi kao tip int& jer je to povratna vrednost funkcije f, ali se samo f(++a) ne izvršava, tako da a ostaje nepromenjeno a b postaje referenca na a. auto obično ne zadržava referencu, ali pošto je ovde napisano auto &c to znači da će c sigurno biti referenca na povratnu vrednost funkcije, tako da i c postaje referenca na a. Nakon toga se dvaput inkrementira a i ispisuju tri iste vrednosti (2), jer sve ti promenljive pokazuju na istu.
3. zadatak
- Zadatak sličan ovome se pojavio kao 10. zadatak na probnom testu te godine.
Koja tvrđenja su tačna za dati programski kod napisan na jeziku C++?
class A {
int i;
public:
A(int ii) { i = ii; }
};
- Klasa A ima implicitno definisani podrazumevani konstruktor.
- Klasa A ima samo jedan konstruktor.
- Objekat klase A se može stvoriti pozivanjem konstruktora koji nema nijedan parametar.
- Objekat klase A se može stvoriti pozivanjem konstruktora koji ima jedan argument.
- Klasa A nema podrazumevani konstruktor.
Objašnjenje: Pošto je napravljen konverzioni konstruktor, više ne postoji implicitno definisani podrazumevani konstruktor, ali i dalje postoje implicitno definisani kopirajući i premeštajući.
4. zadatak
Šta se može iskoristiti umesto *** kako bi se sledeći kod prevodio bez grešaka?
#include <iostream>
using namespace std;
class K {
struct E {
E* sledeci;
int n;
};
public:
static E* novi(int n) {
E* e = new E;
e->n = n;
e->sledeci = nullptr;
return e;
}
};
int main() {
***
return 0;
}
K::E* e = K::novi(5); cout << e->n;void* e = K::novi(5);E* e = K::novi(5); cout << e->n;- Ništa od navedenog
K::novi(5);
Objašnjenje: E se nalazi u privatnoj sekciji klase K tako da se tom imenu ne može pristupiti. S druge strane, svi pokazivači imaju istu veličinu, pa je zato vraćeni pokazivač moguće dodeliti promenljivoj pokazivačkog tipa na void.
5. zadatak
Koliko argumenata mogu prihvatati sledeći operatori ukoliko se preklapaju kao nestatičke metode:
| Operatori | Broj argumenata |
|---|---|
|
|
6. zadatak
Koje sve definicije metoda mogu da se nađu umesto ???:
class A {
public:
virtual void m1() { }
void m2() { }
virtual void m3() final { }
};
class B : public A {
public:
???
};
void m1() { }void m2() { }void m3() { }void m2() override { }void m3() override { }- Ništa od navedenog
Objašnjenje: m1 može da se nađe u izvedenoj klasi i sa override i bez jer je virtuelna, slaže se potpis i može se nadjačati. m2 može da se nađe u izvedenoj klasi bez override, jer se tako sakriva metod iz osnovne klase, ali ne može sa override jer nije virtuelna pa se ne može samo nadjačati. m3 se ne može definisati uopšte jer je konačna i deklaracije i sa i bez override bi se tretirale kao pokušaj nadjačavanja metode iz osnovne klase, što ne sme.
7. zadatak
Koja ključna reč mora da stoji ispred naziva destruktora polimorfne klase kako bi se destruktor izvedene klase iz te polimorfne klase pozivao prilikom uništavanja dinamičkog objekta izvedene klase preko pokazivača na osnovnu korišćenjem delete?
Odgovor: virtual
8. zadatak
Rukovalac tipa R prihvata izuzetak tipa X ako:
- X je javno izvedeno iz R
- X je privatno izvedeno iz R
- R i X su isti tip
- R je javno izvedeno iz X
- R je privatno izvedeno iz X
9. zadatak
Generički mehanizam je:
- dinamički
- statički
- statički i dinamički
10. zadatak
Šta ispisuje sledeći kod na programskom jeziku C++?
#include <iostream>
using namespace std;
template <typename T>
void f(T p) { cout << 1; }
template <typename T>
void f(T* p) { cout << 2; }
template <>
void f(int* p) { cout << 3; }
int main() {
int* p = nullptr;
f(p);
return 0;
}
Odgovor: 3
Objašnjenje: Treća deklaracija šablona najviše odgovara zadatim parametrima pa se prilikom prevođenja ona bira.