ОО1/Јануар 2023 — разлика између измена
(Нова страница: {{tocright}} '''Januar 2023. godine''' održan je 27. januara 2023. i trajao je 20 minuta. {{rešenja}} == 1. zadatak == Šta ispisuje navedeni isečak koda na jeziku…) |
м (Formatiranje) |
||
| Ред 1: | Ред 1: | ||
{{tocright}} | {{tocright}} | ||
''' | '''Ispit u januarskom roku 2023. godine''' održan je 27. januara i trajao je 20 minuta. | ||
{{rešenja}} | {{rešenja}} | ||
| Ред 26: | Ред 26: | ||
# 722 | # 722 | ||
</div> | </div> | ||
'''Objašnjenje:''' <span class="spoiler" data-solution="explanation">I referenca <code>r</code> i pokazivač <code>pok</code> ukazuju na prvi element niza p.</span> | |||
Objašnjenje: <span class="spoiler" data-solution="explanation">I referenca r i pokazivač pok ukazuju na prvi element niza p.</span> | |||
== 2. zadatak == | == 2. zadatak == | ||
U kojim od navedenih funkcija klase K je pokazivač <code>this</code> tipa <code>const *K const</code>? | U kojim od navedenih funkcija klase K je pokazivač <code>this</code> tipa <code>const *K const</code>? | ||
<div class="abc-list" data-solution="multiple"> | <div class="abc-list" data-solution="multiple"> | ||
# < | # <syntaxhighlight lang="cpp" inline class="solution">void f() const</syntaxhighlight> | ||
# < | # <syntaxhighlight lang="cpp" inline>friend f(const klasa& k)</syntaxhighlight> | ||
# < | # <syntaxhighlight lang="cpp" inline class="solution">void f(const klasa& k) const</syntaxhighlight> | ||
# < | # <syntaxhighlight lang="cpp" inline>void f(const klasa& k)</syntaxhighlight> | ||
# < | # <syntaxhighlight lang="cpp" inline class="solution">const void f() const</syntaxhighlight> | ||
</div> | </div> | ||
'''Objašnjenje:''' <span class="spoiler" data-solution="explanation">Da bi this bio ovog tipa, funkcija mora da bude inspektor (da ima modifikator <code>const</code>). Prijateljske funkcije uopšte nemaju pokazivač <code>this</code>.</span> | |||
Objašnjenje: <span class="spoiler" data-solution="explanation">Da bi this bio ovog tipa, funkcija mora da bude | |||
== 3. zadatak == | == 3. zadatak == | ||
| Ред 51: | Ред 48: | ||
# ??? | # ??? | ||
</div> | </div> | ||
'''Objašnjenje:''' <span class="spoiler" data-solution="explanation">U odgovoru pod b) misli se na pokazivač tipa takve klase, koji može da pokazuje na objekat neke neapstraktne klase izvedene iz nje.</span> | |||
Objašnjenje: <span class="spoiler" data-solution="explanation">U odgovoru pod b) misli se na pokazivač tipa takve klase, koji može da pokazuje na objekat neke neapstraktne klase izvedene iz nje.</span> | |||
== 4. zadatak == | == 4. zadatak == | ||
| Ред 63: | Ред 59: | ||
class X { | class X { | ||
int ii; | int ii; | ||
public: | |||
X(int i, int ii=7); | |||
} | }; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<div class="abc-list" data-solution="multiple"> | <div class="abc-list" data-solution="multiple"> | ||
| Ред 84: | Ред 80: | ||
# <span class="solution">Metod bez parametara</span> | # <span class="solution">Metod bez parametara</span> | ||
</div> | </div> | ||
'''Objašnjenje:''' <span class="spoiler" data-solution="explanation">Odgovor pod c) je tačan jer je u pitanju šiftovanje a ne preklopleni ispis.</span> | |||
Objašnjenje: <span class="spoiler" data-solution="explanation">Odgovor pod c) je tačan jer je u pitanju šiftovanje a ne preklopleni ispis.</span> | |||
== 6. zadatak == | == 6. zadatak == | ||
Kako mora da izgleda definicija preklopljenog operatora + klase Racun da bi se dati program pokretao? | Kako mora da izgleda definicija preklopljenog operatora + klase <code>Racun</code> da bi se dati program pokretao? | ||
<syntaxhighlight lang="cpp"> | <syntaxhighlight lang="cpp"> | ||
#include <iostream> | #include <iostream> | ||
int main { | int main() { | ||
Racun() + 100; | Racun() + 100; | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<div class="abc-list" data-solution="multiple"> | <div class="abc-list" data-solution="multiple"> | ||
# < | # <syntaxhighlight lang="cpp" inline>Racun& operator+(Racun &r, int b);</syntaxhighlight> | ||
# < | # <syntaxhighlight lang="cpp" inline class="solution">Racun& operator+(int b)</syntaxhighlight> | ||
# < | # <syntaxhighlight lang="cpp" inline>Racun& operator+(int b, Racun &r);</syntaxhighlight> | ||
# < | # <syntaxhighlight lang="cpp" inline class="solution">friend Racun& operator+(Racun &r, int b)</syntaxhighlight> | ||
# < | # <syntaxhighlight lang="cpp" inline>friend Racun& operator+(int b, Racun &r)</syntaxhighlight> | ||
</div> | </div> | ||
'''Objašnjenje:''' <span class="spoiler" data-solution="explanation">Treba voditi računa o redosledu i broju argumenata.</span> | |||
Objašnjenje: <span class="spoiler" data-solution="explanation">Treba voditi računa o redosledu i broju argumenata.</span> | |||
== 7. zadatak == | == 7. zadatak == | ||
| Ред 115: | Ред 109: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<div class="abc-list" data-solution="multiple"> | <div class="abc-list" data-solution="multiple"> | ||
# < | # <syntaxhighlight lang="cpp" inline>A a; B b = a</syntaxhighlight> | ||
# < | # <syntaxhighlight lang="cpp" inline class="solution">A *a = new A</syntaxhighlight> | ||
# < | # <syntaxhighlight lang="cpp" inline class="solution">B b; A &a=b</syntaxhighlight> | ||
# < | # <syntaxhighlight lang="cpp" inline>A &a = new B</syntaxhighlight> | ||
</div> | </div> | ||
| Ред 128: | Ред 122: | ||
using namespace std; | using namespace std; | ||
class Klasa{}; | class Klasa {}; | ||
int main() { | int main() { | ||
try{ | try { | ||
try { | |||
cout << 0; | |||
throw Klasa(); | |||
cout << 1; | |||
} | |||
catch(int i) {cout << 2;} | |||
cout << 3; | |||
} | } | ||
catch(Klasa k) {cout << 4;} | catch(Klasa k) {cout << 4;} | ||
| Ред 147: | Ред 141: | ||
'''Rešenje:''' <span class="spoiler" data-solution="text">045</span> | '''Rešenje:''' <span class="spoiler" data-solution="text">045</span> | ||
Objašnjenje: <span class="spoiler" data-solution="explanation">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.</span> | '''Objašnjenje:''' <span class="spoiler" data-solution="explanation">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.</span> | ||
== 9. zadatak == | == 9. zadatak == | ||
Šta može | Šta može stajati umesto ### kako bi se na izlazu ispisalo 0? | ||
<syntaxhighlight lang="cpp"> | <syntaxhighlight lang="cpp"> | ||
#include <iostream> | #include <iostream> | ||
int x = 0; | |||
namespace A { | |||
int x = 3; | int x = 3; | ||
namespace B{ | namespace B { | ||
int x = 2; | |||
void f() { | |||
### | |||
} | |||
} | } | ||
} | |||
int main() { | |||
A::B::f(); | |||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<div class="abc-list" data-solution="multiple"> | <div class="abc-list" data-solution="multiple"> | ||
# < | # <syntaxhighlight lang="cpp" inline class="solution">std::cout << x-2</syntaxhighlight> | ||
# < | # <syntaxhighlight lang="cpp" inline>std::cout << :x</syntaxhighlight> | ||
# < | # <syntaxhighlight lang="cpp" inline class="solution">std::cout << ::x</syntaxhighlight> | ||
# < | # <syntaxhighlight lang="cpp" inline>global x; std::cout << x;</syntaxhighlight> | ||
</div> | </div> | ||
'''Objašnjenje:''' <span class="spoiler" data-solution="explanation">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++.</span> | |||
Objašnjenje: <span class="spoiler" data-solution="explanation">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++.</span> | |||
== 10. zadatak == | == 10. zadatak == | ||
Šta će se ispisati na izlazu nakon izvršavanja ovog programa? | Šta će se ispisati na izlazu nakon izvršavanja ovog programa? | ||
<syntaxhighlight lang="cpp"> | <syntaxhighlight lang="cpp"> | ||
template <typename T, typename U> f(T t, U u) | #include <iostream> | ||
cout << | using namespace std; | ||
template <typename T, typename U> void f(T t, U u) {cout << 'a';} | |||
void f(int i, double d) | void f(int i, double d) {cout << 'b';} | ||
cout << | |||
int main{ | int main() { | ||
f(1, 2.0); | |||
f(1, 1); | |||
f<int, int>(1, 2.0); | |||
f<>(1, 2.0); | |||
f(1.0, 2.0); | |||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
'''Rešenje:''' <span class="spoiler" data-solution="text">baaaa <ref>Studenti koji su stavili 4/5 tačnih slova na odgovarajućim mestima dobili su 0.5 poena nakon prihvaćene molbe.</ref | '''Rešenje:''' <span class="spoiler" data-solution="text">baaaa</span><ref>Studenti koji su stavili 4/5 tačnih slova na odgovarajućim mestima dobili su 0.5 poena nakon prihvaćene molbe.</ref> | ||
== Napomene == | == Napomene == | ||
<references /> | <references /> | ||
[[Категорија:Рокови]] | [[Категорија:Рокови]] | ||
[[Категорија:OO1]] | [[Категорија:OO1]] | ||
Верзија на датум 8. фебруар 2023. у 19:53
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.