ОО1/К1 2020 — разлика између измена
м (→6 zadatak: .) |
м (Objašnjenja) |
||
(Није приказано 16 међуизмена 4 корисника) | |||
Ред 1: | Ред 1: | ||
{{tocright}} | {{tocright}} | ||
* | {{rešenja}} | ||
* | |||
== G1 == | |||
=== 1. zadatak === | |||
Koji je tip promenljive <code>p</code> u sledećem programu: | |||
<syntaxhighlight lang="cpp"> | |||
int main(void) { | |||
int i = 1; | |||
const int k = i; | |||
auto p = new int + k; | |||
return 0; | |||
} | |||
</syntaxhighlight> | |||
<div class="abc-list" data-solution="single"> | |||
# <code>int</code> | |||
# <code>const int</code> | |||
# <code class="solution">int*</code> | |||
# <code>const int*</code> | |||
# Program se ne prevodi. | |||
</div> | |||
Objašnjenje: <span class="spoiler" data-solution="explanation">Vrednost <code>p</code> će biti pokazivač pomeren za <code>k</code>.</span> | |||
=== 2. zadatak === | |||
Šta ispisuje sledeći program na jeziku C++? | |||
<syntaxhighlight lang="cpp"> | |||
#include <iostream> | |||
int &f(int &x){ | |||
return ++x; | |||
} | |||
int main(void) { | |||
std::cout << f(2); | |||
} | |||
</syntaxhighlight> | |||
<div class="abc-list" data-solution="single"> | |||
# 6 | |||
# 0 | |||
# <span class="solution">Program se ne prevodi.</span> | |||
# 5 | |||
</div> | |||
Objašnjenje: <span class="spoiler" data-solution="explanation">Funkcija prima referencu na lvrednost a 2 je dvrednost.</span> | |||
=== 3. zadatak === | |||
Ime simbol predstavlja niz referenci na nepromenljiv pokazivač na int. Kako se deklariše u kodu? | |||
<div class="abc-list" data-solution="single"> | |||
# ... | |||
# ... | |||
# <code>int * const &simbol[]</code> | |||
# <span class="solution">Deklaracija za simbol se ne prevodi.</span> | |||
</div> | |||
=== ?. zadatak === | |||
: ''Isti zadatak se našao i na [[ОО1/Пробни тестови 2020#3. zadatak 3|probnom kolokvijumu za IR]].'' | |||
Koje tvrđenje je tačno? | |||
<div class="abc-list" data-solution="single"> | |||
# <span class="solution">Mehanizam preklapanje<sup>[sic]</sup> imena funkcija je potpuno statički, koja funkcija će se pozvati određuje se u vreme prevođenja.</span> | |||
# Mehanizam preklapanje<sup>[sic]</sup> imena funkcija je potpuno dinamički, koja funkcija će se pozvati određuje se u vreme izvršavanja. | |||
# Mehanizam preklapanje<sup>[sic]</sup> imena funkcija je potpuno statički, koja funkcija će se pozvati određuje se u vreme izvršavanja. | |||
# Mehanizam preklapanje<sup>[sic]</sup> imena funkcija je potpuno dinamički, koja funkcija će se pozvati određuje se u vreme prevođenja. | |||
</div> | |||
=== ?. zadatak === | |||
: ''Isti zadatak se našao i na [[ОО1/Пробни тестови 2020#4. zadatak 3|probnom kolokvijumu za IR]].'' | |||
Koja tvrđenja su tačna na programskom jeziku C++? | |||
<div class="abc-list" data-solution="multiple"> | |||
# <span class="solution">Metodi <code>int f() & { return 1; }</code> i <code>int f() && { return 3; }</code> mogu postojati u istoj klasi.</span> | |||
# <span class="solution">Metodi <code>int f() & { return 1; }</code> i <code>int f() const & { return 3; }</code> mogu postojati u istoj klasi.</span> | |||
# Metodi <code>int f() & { return 1; }</code> i <code>void f() & { }</code> mogu postojati u istoj klasi. | |||
</div> | |||
=== 7. zadatak === | |||
Šta ispisuje sledeći program na programskom jeziku C++: | |||
<syntaxhighlight lang="cpp"> | |||
#include <iostream> | |||
using namespace std; | |||
class K { | |||
static int staticId; | |||
int id = staticId++; | |||
public: | |||
K() = default; | |||
K(const K&) {} | |||
int m(K arg) { | |||
return arg.id; | |||
} | |||
}; | |||
int K::staticId = 1; | |||
int main() | |||
{ | |||
K a; | |||
K b; | |||
K c(a); | |||
cout << a.m(c); | |||
} | |||
</syntaxhighlight> | |||
<div class="abc-list" data-solution="single"> | |||
# 1 | |||
# 2 | |||
# 5 | |||
# 3 | |||
# <span class="solution">4</span> | |||
# Više od 5. | |||
</div> | |||
Objašnjenje: <span class="spoiler" data-solution="explanation">Svakom objektu se dodeljuje novi ID pri stvaranju, a poslednji napravljeni objekat pre izvršavanja metode jeste sami argument metode, kopiran prilikom prosleđivanja.</span> | |||
== G2 == | == G2 == | ||
=== 1. zadatak === | === 1. zadatak === | ||
Zaokružiti tačne tvrdnje | Zaokružiti tačne tvrdnje u vezi sa referencama na jeziku C++: | ||
<div class="abc-list"> | <div class="abc-list" data-solution="single"> | ||
# <span class="solution">Moguće je definisati referencu na pokazivač.</span> | # <span class="solution">Moguće je definisati referencu na pokazivač.</span> | ||
# Moguće je definisati niz referenci. | # Moguće je definisati niz referenci. | ||
Ред 12: | Ред 116: | ||
# Moguće je definisati pokazivač na referencu. | # Moguće je definisati pokazivač na referencu. | ||
</div> | </div> | ||
=== 2. zadatak === | === 2. zadatak === | ||
Ред 28: | Ред 131: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<div class="abc-list"> | <div class="abc-list" data-solution="single"> | ||
# 6 | # 6 | ||
# 0 | # 0 | ||
Ред 34: | Ред 137: | ||
# 5 | # 5 | ||
</div> | </div> | ||
Objašnjenje: <span class="spoiler" data-solution="explanation"><code>x++</code> vraća dvrednost, a ne lvrednost.</span> | |||
=== 4. zadatak === | === 4. zadatak === | ||
Povezati tvrdnje | Povezati tvrdnje u vezi sa modifikatorima metoda: | ||
{| class="wikitable" | {| class="wikitable" | ||
|+ Modifikatori | |+ Modifikatori | ||
|- | |- | ||
| <code>volatile </code> <span class="spoiler">b | | | ||
<div data-solution="select" data-options="a,b,c,d,e,f,g,h"> | |||
<code>const </code> <span class="spoiler">e | # <code>volatile </code> <span class="spoiler">b</span> | ||
# <code>const </code> <span class="spoiler">e</span> | |||
<code>& </code> <span class="spoiler">g | # <code>& </code> <span class="spoiler">g</span> | ||
# <code> && </code> <span class="spoiler">f</span> | |||
<code> && </code> <span class="spoiler">f | </div> | ||
|| <div class="abc-list"> | || <div class="abc-list"> | ||
# Metoda se može zvati samo ako je tekući objekat pokazivač. | # Metoda se može zvati samo ako je tekući objekat pokazivač. | ||
Ред 59: | Ред 163: | ||
|} | |} | ||
=== 5 zadatak === | === 5. zadatak === | ||
Zaokružiti tačne tvrdnje | Zaokružiti tačne tvrdnje u vezi sa pomerajućim konstruktorom na jeziku C++: | ||
<div class="abc-list"> | <div class="abc-list" data-solution="single"> | ||
# Definisanjem podrazumevanog konstruktora briše se ugrađeni premeštajući konstruktor. | |||
# <span class="solution">Definisanjem kopirajućeg konstruktora briše se ugrađeni premeštajući konstruktor.</span> | # <span class="solution">Definisanjem kopirajućeg konstruktora briše se ugrađeni premeštajući konstruktor.</span> | ||
# Pomerajući konstruktor mora da ima samo jedan parametar. | # Pomerajući konstruktor mora da ima samo jedan parametar. | ||
</div> | </div> | ||
=== 6 zadatak === | === 6. zadatak === | ||
Zaokružiti tačne tvrdnje | Zaokružiti tačne tvrdnje u vezi sa funkcijama na jeziku C++: | ||
<div class="abc-list"> | <div class="abc-list" data-solution="multiple"> | ||
# <span class="solution">Mogu se definisati više funkcija istog imena ako imaju različiti broj parametara bez podrazumevanih vrednosti. </span> | # <span class="solution">Mogu se definisati više funkcija istog imena ako imaju različiti broj parametara bez podrazumevanih vrednosti. </span> | ||
# Mogu se definisati više funkcija istog imena ako su im različite povratne vrednosti. | # Mogu se definisati više funkcija istog imena ako su im različite povratne vrednosti. | ||
Ред 74: | Ред 179: | ||
# <span class="solution">Mogu se definisati više funkcija istog imena ako imaju različite tipove parametara. </span> | # <span class="solution">Mogu se definisati više funkcija istog imena ako imaju različite tipove parametara. </span> | ||
</div> | </div> | ||
=== 7. zadatak === | |||
Šta ispisuje sledeći program na programskom jeziku C++: | |||
<syntaxhighlight lang="cpp"> | |||
#include <iostream> | |||
using namespace std; | |||
class L { | |||
L(const &L l) = delete; | |||
}; | |||
class K { | |||
static int staticId; | |||
int id = staticId++; | |||
L l; | |||
public: | |||
K() = default; | |||
K(const K&) {} | |||
int m(K arg) { | |||
return arg.id; | |||
} | |||
}; | |||
int K::staticId = 1; | |||
int main() | |||
{ | |||
K a; | |||
K b; | |||
K c(a); | |||
cout << a.m(c); | |||
} | |||
</syntaxhighlight> | |||
<div class="abc-list" data-solution="single"> | |||
# 1 | |||
# 2 | |||
# <span class="solution">Program se ne prevodi</span> | |||
# 3 | |||
# 4 | |||
</div> | |||
Objašnjenje: <span class="spoiler" data-solution="explanation">Nije moguće kopirati klasu K pri prosleđivanju metodi jer njeno polje klase L ne može da se kopira.</span> | |||
=== 8. zadatak === | |||
Šta ispisuje sledeći program na programskom jeziku C++? | |||
<syntaxhighlight lang="cpp"> | |||
#include <iostream> | |||
using namespace std; | |||
class Klasa { | |||
static Klasa *napravi() | |||
{ | |||
cout << 1; | |||
return new Klasa{0}; | |||
} | |||
Klasa *clan = napravi(); | |||
public: | |||
Klasa() { cout << 2; } | |||
Klasa(int a) : clan(nullptr) { cout << 3; } | |||
}; | |||
int main() { | |||
Klasa k; | |||
} | |||
</syntaxhighlight> | |||
Odgovor: <span class="spoiler" data-solution="text">132</span> | |||
Objašnjenje: <span class="spoiler" data-solution="explanation">Prvo se pravi člansko polje pozivanjem statičke metode koja ispisuje 1 a onda poziva konstruktor sa argumentom, i posle toga se inicijalizacija završava pozivom podrazumevanog konstruktora.</span> | |||
=== 9. zadatak === | |||
Dopuniti XXX sa linijom tako da je program ispravan: | |||
<syntaxhighlight lang="cpp"> | |||
#include <iostream> | |||
class A { | |||
A(const A& a) = delete; | |||
public: | |||
int n = 1; | |||
A() = default; | |||
A(A&& a) { }; | |||
}; | |||
void f(A a) { | |||
std::cout << a.n; | |||
} | |||
int main(void) | |||
{ | |||
XXX | |||
return 0; | |||
} | |||
</syntaxhighlight> | |||
<div class="abc-list" data-solution="multiple"> | |||
# <code>f();</code> | |||
# <code>A a; f(a);</code> | |||
# <code class="solution">f(A());</code> | |||
# <code>f(A);</code> | |||
</div> | |||
Objašnjenje: <span class="spoiler" data-solution="explanation">U jedinom tačnom odgovoru se vrednost ne kopira nego premešta.</span> | |||
=== 10. zadatak === | === 10. zadatak === | ||
Zaokružiti tačne tvrdnje | Zaokružiti tačne tvrdnje u vezi sa statičkim poljima u klasama na jeziku C++: | ||
<div class="abc-list"> | <div class="abc-list" data-solution="multiple"> | ||
# U definiciji klase se mogu definisati promenljiva statička polja. | # U definiciji klase se mogu definisati promenljiva statička polja. | ||
# <span class="solution">Doseg imena statičkog polja je klasa.</span> | # <span class="solution">Doseg imena statičkog polja je klasa.</span> | ||
# Statičkom polju s iz klase K se pristupa koristeći izraz K.s. | # Statičkom polju s iz klase K se pristupa koristeći izraz K.s. | ||
</div> | </div> | ||
[[Категорија:Рокови]] | |||
[[Категорија:ОО1]] |
Тренутна верзија на датум 31. јануар 2022. у 21:27
- За питања са више одговора, тачни одговори су подебљани и уоквирени
- За питања за које се одговори уносе, тачни одговори су подвучени и сакривени, тако да се прикажу када изаберете тај текст (пример: овако)
- Притисните лево дугме испод за сакривање и откривање свих одговора, или десно дугме за укључивање и искључивање интерактивног режима:
G1
1. zadatak
Koji je tip promenljive p
u sledećem programu:
int main(void) {
int i = 1;
const int k = i;
auto p = new int + k;
return 0;
}
int
const int
int*
const int*
- Program se ne prevodi.
Objašnjenje: Vrednost p
će biti pokazivač pomeren za k
.
2. zadatak
Šta ispisuje sledeći program na jeziku C++?
#include <iostream>
int &f(int &x){
return ++x;
}
int main(void) {
std::cout << f(2);
}
- 6
- 0
- Program se ne prevodi.
- 5
Objašnjenje: Funkcija prima referencu na lvrednost a 2 je dvrednost.
3. zadatak
Ime simbol predstavlja niz referenci na nepromenljiv pokazivač na int. Kako se deklariše u kodu?
- ...
- ...
int * const &simbol[]
- Deklaracija za simbol se ne prevodi.
?. zadatak
- Isti zadatak se našao i na probnom kolokvijumu za IR.
Koje tvrđenje je tačno?
- Mehanizam preklapanje[sic] imena funkcija je potpuno statički, koja funkcija će se pozvati određuje se u vreme prevođenja.
- Mehanizam preklapanje[sic] imena funkcija je potpuno dinamički, koja funkcija će se pozvati određuje se u vreme izvršavanja.
- Mehanizam preklapanje[sic] imena funkcija je potpuno statički, koja funkcija će se pozvati određuje se u vreme izvršavanja.
- Mehanizam preklapanje[sic] imena funkcija je potpuno dinamički, koja funkcija će se pozvati određuje se u vreme prevođenja.
?. zadatak
- Isti zadatak se našao i na probnom kolokvijumu za IR.
Koja tvrđenja su tačna na programskom jeziku C++?
- Metodi
int f() & { return 1; }
iint f() && { return 3; }
mogu postojati u istoj klasi. - Metodi
int f() & { return 1; }
iint f() const & { return 3; }
mogu postojati u istoj klasi. - Metodi
int f() & { return 1; }
ivoid f() & { }
mogu postojati u istoj klasi.
7. zadatak
Šta ispisuje sledeći program na programskom jeziku C++:
#include <iostream>
using namespace std;
class K {
static int staticId;
int id = staticId++;
public:
K() = default;
K(const K&) {}
int m(K arg) {
return arg.id;
}
};
int K::staticId = 1;
int main()
{
K a;
K b;
K c(a);
cout << a.m(c);
}
- 1
- 2
- 5
- 3
- 4
- Više od 5.
Objašnjenje: Svakom objektu se dodeljuje novi ID pri stvaranju, a poslednji napravljeni objekat pre izvršavanja metode jeste sami argument metode, kopiran prilikom prosleđivanja.
G2
1. zadatak
Zaokružiti tačne tvrdnje u vezi sa referencama na jeziku C++:
- Moguće je definisati referencu na pokazivač.
- Moguće je definisati niz referenci.
- Moguće je definisati referencu na referencu.
- Moguće je definisati pokazivač na referencu.
2. zadatak
Šta ispisuje sledeći program na jeziku C++?
#include <iostream>
int &f(int &x){
return x++;
}
int main(void) {
int x = 5;
std::cout << f(x);
}
- 6
- 0
- Program se ne prevodi.
- 5
Objašnjenje: x++
vraća dvrednost, a ne lvrednost.
4. zadatak
Povezati tvrdnje u vezi sa modifikatorima metoda:
|
|
5. zadatak
Zaokružiti tačne tvrdnje u vezi sa pomerajućim konstruktorom na jeziku C++:
- Definisanjem podrazumevanog konstruktora briše se ugrađeni premeštajući konstruktor.
- Definisanjem kopirajućeg konstruktora briše se ugrađeni premeštajući konstruktor.
- Pomerajući konstruktor mora da ima samo jedan parametar.
6. zadatak
Zaokružiti tačne tvrdnje u vezi sa funkcijama na jeziku C++:
- Mogu se definisati više funkcija istog imena ako imaju različiti broj parametara bez podrazumevanih vrednosti.
- Mogu se definisati više funkcija istog imena ako su im različite povratne vrednosti.
- Ne mogu se definisati više funkcija istog imena, jer kompajler ne bi mogao da ih raspozna.
- Mogu se definisati više funkcija istog imena ako imaju različite tipove parametara.
7. zadatak
Šta ispisuje sledeći program na programskom jeziku C++:
#include <iostream>
using namespace std;
class L {
L(const &L l) = delete;
};
class K {
static int staticId;
int id = staticId++;
L l;
public:
K() = default;
K(const K&) {}
int m(K arg) {
return arg.id;
}
};
int K::staticId = 1;
int main()
{
K a;
K b;
K c(a);
cout << a.m(c);
}
- 1
- 2
- Program se ne prevodi
- 3
- 4
Objašnjenje: Nije moguće kopirati klasu K pri prosleđivanju metodi jer njeno polje klase L ne može da se kopira.
8. zadatak
Šta ispisuje sledeći program na programskom jeziku C++?
#include <iostream>
using namespace std;
class Klasa {
static Klasa *napravi()
{
cout << 1;
return new Klasa{0};
}
Klasa *clan = napravi();
public:
Klasa() { cout << 2; }
Klasa(int a) : clan(nullptr) { cout << 3; }
};
int main() {
Klasa k;
}
Odgovor: 132
Objašnjenje: Prvo se pravi člansko polje pozivanjem statičke metode koja ispisuje 1 a onda poziva konstruktor sa argumentom, i posle toga se inicijalizacija završava pozivom podrazumevanog konstruktora.
9. zadatak
Dopuniti XXX sa linijom tako da je program ispravan:
#include <iostream>
class A {
A(const A& a) = delete;
public:
int n = 1;
A() = default;
A(A&& a) { };
};
void f(A a) {
std::cout << a.n;
}
int main(void)
{
XXX
return 0;
}
f();
A a; f(a);
f(A());
f(A);
Objašnjenje: U jedinom tačnom odgovoru se vrednost ne kopira nego premešta.
10. zadatak
Zaokružiti tačne tvrdnje u vezi sa statičkim poljima u klasama na jeziku C++:
- U definiciji klase se mogu definisati promenljiva statička polja.
- Doseg imena statičkog polja je klasa.
- Statičkom polju s iz klase K se pristupa koristeći izraz K.s.