ОО1/Јануар 2022 — разлика између измена
м (WIP g3) |
(→G3) |
||
| Ред 177: | Ред 177: | ||
# Izuzetak ne može da se baci iz <code>catch</code> bloka. | # Izuzetak ne može da se baci iz <code>catch</code> bloka. | ||
</div> | </div> | ||
[[Категорија:Рокови]] | |||
[[Категорија:ОО1]] | |||
== G3 == | == G3 == | ||
=== 1. zadatak === | |||
Šta ispisuje sledeći segment koda napisan na programskom jeziku C++? | |||
<syntaxhighlight lang="cpp"> | |||
#include <iostream> | |||
using namespace std; | |||
int i = 7; | |||
int main() { | |||
for(int i = 0; i < 3; i++) { | |||
if(int i = 1) { | |||
cout << i; | |||
} | |||
} | |||
cout << i; | |||
return 0; | |||
} | |||
</syntaxhighlight> | |||
Odgovor: <span class="spoiler" data-solution="text">1117</span> | |||
=== 2. zadatak === | |||
Šta može da stoje umesto #### da bi se kod napisan na jeziku C++ uspešno preveo? | |||
<syntaxhighlight lang="cpp"> | |||
#include <iostream> | |||
int main() { | |||
int a = 1, b = 2; | |||
int * const p = &a; | |||
#### | |||
} | |||
</syntaxhighlight> | |||
Izaberite jedan ili više odgovora: | |||
<div class="abc-list" data-solution="multiple"> | |||
# <code>p++;</code> | |||
# <span class="solution"><code>*p = 1;</code></span> | |||
# <code>p = &b;</code> | |||
# <span class="solution"><code>std::cout << p;</code></span> | |||
# <span class="solution"><code>std::cout << *p;</code></span> | |||
</div> | |||
=== 3. zadatak === | |||
Šta ispisuje sledeći program napisan na jeziku C++? | |||
<syntaxhighlight lang="cpp"> | |||
#include <iostream> | |||
using namespace std; | |||
class Klasa { | |||
public: | |||
void metoda() & { cout << "1"; } | |||
void metoda() && { cout << "2"; } | |||
}; | |||
int main(){ | |||
Klasa &&dRef = Klasa(); | |||
dRef.metoda(); | |||
return 0; | |||
} | |||
</syntaxhighlight> | |||
Odgovor: <span class="spoiler" data-solution="text">1</span> | |||
=== 4. zadatak === | |||
Ukoliko su date sledeće datoteke "X.h" i "main.cpp": | |||
<syntaxhighlight lang="cpp"> | |||
// datoteka X.h | |||
class X { | |||
int a; | |||
private: | |||
static int b; | |||
public: | |||
static int c; | |||
int d; | |||
}; | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="cpp"> | |||
// datoteka main.cpp | |||
#include "X.h" | |||
int X::b = 1; | |||
int X::c = 1; | |||
int main() { | |||
X y; | |||
*** | |||
} | |||
</syntaxhighlight> | |||
koja od ovih navedenih naredbi ispravno zamenjuje ***? | |||
Izaberite jedan ili više odgovora: | |||
<div class="abc-list" data-solution="multiple"> | |||
# <code>y.b = 2;</code> | |||
# <span class="solution"><code>X::c = 5;</code></span> | |||
# <code>y.a = 1;</code> | |||
# <code>X::d = 3;</code> | |||
# <span class="solution"><code>y.d = 4;</code></span> | |||
</div> | |||
=== 5. zadatak === | |||
Šta od sledećeg važi za preklapanje operatora na programskom jeziku C++? | |||
Izaberite jedan ili više odgovora: | |||
<div class="abc-list" data-solution="multiple"> | |||
# Ukoliko je levi operand binarne operacije standardnog tipa mora se preklopiti kao metod odgovarajuće klase. | |||
# Operator <code>[]</code> se mora preklopiti kao globalna prijateljska funkcija. | |||
# <span class="solution">Operator dodele se mora preklopiti kao nestatički metod klase.</span> | |||
# <span class="solution">Operator <code>()</code> se mora preklopiti kao nestatički metod klase.</span> | |||
# <span class="solution">Binarni operator <code>+</code> je moguće preklopiti i kao metod klase i kao globalnu prijateljsku funkciju.</span> | |||
</div> | |||
=== 6. zadatak === | |||
Šta od sledećeg važi za izvođenje na programskom jeziku C++? | |||
Izaberite jedan ili više odgovora: | |||
<div class="abc-list" data-solution="multiple"> | |||
# <span class="solution">Objekti izvedene klase sadrže bezimeni podobjekat osnovne klase.</span> | |||
# Preko objekata izvedene klase zaštićenim članovima osnovne klase se pristupa isto kao javnim članovima izvedene klase. | |||
# Jezici koji podržavaju izvođenje se nazivaju objektno bazirani jezici. | |||
# Modifikator <code>final</code> se koristi za klasu koja nije izvedena ni iz jedne klase. | |||
# Kada se neka klasa izvede iz klase X, potrebno je izvršiti ponovno prevođenje klase X. | |||
</div> | |||
=== 7. zadatak === | |||
Šta ispisuje sledeći program? | |||
<syntaxhighlight lang="cpp"> | |||
#include <iostream> | |||
using namespace std; | |||
class B { | |||
public: | |||
B() { std::cout << "b"; } | |||
}; | |||
class X : virtual public B { | |||
public: | |||
X() { std::cout << "x"; } | |||
}; | |||
class Y : virtual public B { | |||
public: | |||
Y() { std::cout << "y"; } | |||
}; | |||
class Z : public X, public Y { | |||
public: | |||
Z() { std::cout << "z"; } | |||
}; | |||
int main() { | |||
Z z; | |||
} | |||
</syntaxhighlight> | |||
Izaberite jedan odgovor: | |||
<div class="abc-list" data-solution="single"> | |||
# <span class="solution">bxyz</span> | |||
# bxbyz | |||
# byxz | |||
# bybxz | |||
# Program se ne prevodi. | |||
</div> | |||
=== 8. zadatak === | |||
Koje tvrdnje u vezi operatora za dinamičku konverziju (<code>dynamic_cast</code>) su tačne? | |||
Izaberite jedan ili više odgovora: | |||
<div class="abc-list" data-solution="multiple"> | |||
# <span class="solution">Operator za dinamičku konverziju primenjen na referencu tipa osnovne klase pri neuspešnoj konverziji u referencu na izvedenu klasu baca izuzetak tipa <code>bad_cast</code>.</span> | |||
# Operator za dinamičku konverziju se mora primenjivati za svaku konverziju naviše (<code>upcast</code>) koja se vrši u vreme izvršenja programa. | |||
# Operator za dinamičku konverziju se može primeniti na pokazivač ili referencu na objekat nepolimorfne osnovne klase. | |||
# <span class="solution">Operator za dinamičku konverziju primenjen na pokazivač tipa osnovne klase vraća <code>nullptr</code> ako konverzija u pokazivač tipa izvedene klase ne uspeva.</span> | |||
# Operator za dinamičku konverziju garantuje da će se konverzija u vreme izvršenja pravilno izvršiti i da će objekat biti konvertovan u ciljni objekat. | |||
</div> | |||
=== 9. zadatak === | |||
Ako su <code>I1, I2, I3</code> i <code>I4</code> klase izuzetaka i ako je u osnovnoj klasi <code>A</code> deklarisan metod: | |||
<syntaxhighlight lang="cpp"> | |||
virtual void m() throw (I1, I2, I3): | |||
</syntaxhighlight> | |||
deklaracija metoda <code>m()</code> u izvedenoj klasi <code>B</code> može da bude: | |||
Izaberite jedan ili više odgovora: | |||
<div class="abc-list" data-solution="multiple"> | |||
# <span class="solution"><code>void m() noexcept:</code></span> | |||
# <span class="solution"><code>void m() throw ():</code></span> | |||
# <span class="solution"><code>void m() throw (I1, I2, I3):</code></span> | |||
# <span class="solution"><code>void m() throw (I1):</code></span> | |||
# <code>void m() throw (I2, I4):</code> | |||
</div> | |||
=== 10. zadatak === | |||
Ako je generička klasa definisana na sledeći način: | |||
<syntaxhighlight lang="cpp"> | |||
template <class T> class K { void m(T t); }; | |||
</syntaxhighlight> | |||
metod <code>m</code> može da bude definisan izvan klase <code>K</code> na sledeći način: | |||
Izaberite jedan odgovor: | |||
<div class="abc-list" data-solution="single"> | |||
# <code>void K::m(T t) { ... }</code> | |||
# <span class="solution"><code>template <class T> void K<T>::m(T t) { ... }</code></span> | |||
# <code>void K<T>::m(T t) { ... }</code> | |||
</div> | |||
Верзија на датум 28. јануар 2022. у 20:44
- За питања са више одговора, тачни одговори су подебљани и уоквирени
- За питања за које се одговори уносе, тачни одговори су подвучени и сакривени, тако да се прикажу када изаберете тај текст (пример: овако)
- Притисните лево дугме испод за сакривање и откривање свих одговора, или десно дугме за укључивање и искључивање интерактивног режима:
G1
1. zadatak
Šta je tačno za navedeni isečak koda na jeziku C++?
#include <iostream>
using namespace std;
int main() {
int niz[] = { 1, 2, 3 };
int i;
cin >> i;
cout << niz[i];
}
- Postoji problem curenja memorije.
- Niz ima tačno 3 elemenata.
- Postoji problem sa visećim pokazivačem.
- Ako se na standardni ulaz upiše 1, program će ispisati 1.
2. zadatak
Šta je moguće staviti umesto ??? na ovom isečku koda na jeziku C++?
#include <iostream>
using namespace std;
int main() {
char slova[] = "slova";
char* const pk = slova;
???
}
pk++;(*pk)++;pk = "xyz";char c = pk[1];pk[0] = 'a';
Objašnjenje: pk je konstantni pokazivač na char što znači da ne može da se promeni na šta on pokazuje, tako da su prvi i treći odgovori netačni. Drugi i peti odgovori su tačni jer je samo pokazivač konstantan, a ne promenljiva na koju pokazuje.
3. zadatak
Šta je moguće staviti umesto ??? na ovom isečku koda na jeziku C++?
#include <iostream>
using namespace std;
class X {
int a;
public:
static int y;
int b;
private:
static int x;
};
int X::y = 1;
int X::x = 2;
int main() {
X obj;
???
}
obj.a = 5;obj.b = 5;obj.y = 5;obj.x = 5;X::y = 5;
4. zadatak
Šta ispisuje sledeći kod na programskom jeziku C++?
#include <iostream>
using namespace std;
class X {
public:
static X&& kreiraj() { X* pk = new X(); return static_cast<X&&>(*pk); }
void metod()& { cout << 1; }
void metod()&& { cout << 2; }
};
int main() {
X x;
x.metod();
X::kreiraj().metod();
}
- Program se ne prevodi.
- 1
- 11
- 12
- 21
5. zadatak
Šta ispisuje sledeći kod na programskom jeziku C++?
#include <iostream>
using namespace std;
class A {
public:
A() { cout << "0"; }
};
class B{
A a;
public:
B() { cout << "1"; }
};
class C : public B {
A a;
public:
C() { cout << "2"; }
};
int main() {
C c;
}
- Program se ne prevodi.
- 0120
- 0102
- Nijedan od ponuđenih odgovora.
6. zadatak
Šta je tačno od sledećih navoda o preklapanju operatora na jeziku C++?
- Ako se preklopi operator
newgubi se podrazumevani konstruktor. - Kada se preklapa
(), operator može da primi proizvoljno parametara ali svi moraju da budu standardnog tipa. - Funkcijska klasa je klasa koja preklapa barem jedan od operatora
() [] ->. - Klasa može imati više preklopnjenih
newoperatora. newoperator se preklapa kao statički metod.
7. zadatak
Šta je tačno od sledećih navoda o apstraktnim klasama na jeziku C++?
- Apstraktna klasa je ona koja ima barem jednu apstraktnu metodu.
- Statički metod može da bude apstraktan.
- Klasa može biti apstraktna ako su joj destruktor i sve metode konkretne.
- Da bi izvedena klasa bila konkretna, mora da konkretizuje sve apstraktne metode.
- Apstraktna klasa se označava sa
abstractu definiciji preclass.
8. zadatak
Šta je tačno od sledećih navoda o šablonskim klasama na jeziku C++?
- Može se izvoditi iz šablonskih klasa.
- Šablonska klasa ne može imati virtuelne metode.
- Šablonski metodi ne mogu biti virtuelni.
- ??
- ??
9. zadatak
Šta je tačno od sledećih navoda o virtuelnim metodama na jeziku C++?
- Destruktor može da bude virtuelan.
- Konstruktor može da bude virtuelan.
- Statički metod može da bude virtuelan.
- Prijateljska globalna funkcija može biti virtuelna.
- Nestatički metod može da bude virtuelan.
10. zadatak
Šta je tačno od sledećih navoda o rukovaocima izuzetaka na jeziku C++?
- Rukovalac tipa
doublemože da prihvati izuzetke tipaint. - Rukovalac tipa
...prihvata sve tipove izuzetaka. - Rukovalac tipa
intmože da prihvati izuzetke tipadouble. - Izuzetak može da se baci iz
trybloka. - Izuzetak ne može da se baci iz
catchbloka.
G3
1. zadatak
Šta ispisuje sledeći segment koda napisan na programskom jeziku C++?
#include <iostream>
using namespace std;
int i = 7;
int main() {
for(int i = 0; i < 3; i++) {
if(int i = 1) {
cout << i;
}
}
cout << i;
return 0;
}
Odgovor: 1117
2. zadatak
Šta može da stoje umesto #### da bi se kod napisan na jeziku C++ uspešno preveo?
#include <iostream>
int main() {
int a = 1, b = 2;
int * const p = &a;
####
}
Izaberite jedan ili više odgovora:
p++;*p = 1;p = &b;std::cout << p;std::cout << *p;
3. zadatak
Šta ispisuje sledeći program napisan na jeziku C++?
#include <iostream>
using namespace std;
class Klasa {
public:
void metoda() & { cout << "1"; }
void metoda() && { cout << "2"; }
};
int main(){
Klasa &&dRef = Klasa();
dRef.metoda();
return 0;
}
Odgovor: 1
4. zadatak
Ukoliko su date sledeće datoteke "X.h" i "main.cpp":
// datoteka X.h
class X {
int a;
private:
static int b;
public:
static int c;
int d;
};
// datoteka main.cpp
#include "X.h"
int X::b = 1;
int X::c = 1;
int main() {
X y;
***
}
koja od ovih navedenih naredbi ispravno zamenjuje ***? Izaberite jedan ili više odgovora:
y.b = 2;X::c = 5;y.a = 1;X::d = 3;y.d = 4;
5. zadatak
Šta od sledećeg važi za preklapanje operatora na programskom jeziku C++?
Izaberite jedan ili više odgovora:
- Ukoliko je levi operand binarne operacije standardnog tipa mora se preklopiti kao metod odgovarajuće klase.
- Operator
[]se mora preklopiti kao globalna prijateljska funkcija. - Operator dodele se mora preklopiti kao nestatički metod klase.
- Operator
()se mora preklopiti kao nestatički metod klase. - Binarni operator
+je moguće preklopiti i kao metod klase i kao globalnu prijateljsku funkciju.
6. zadatak
Šta od sledećeg važi za izvođenje na programskom jeziku C++?
Izaberite jedan ili više odgovora:
- Objekti izvedene klase sadrže bezimeni podobjekat osnovne klase.
- Preko objekata izvedene klase zaštićenim članovima osnovne klase se pristupa isto kao javnim članovima izvedene klase.
- Jezici koji podržavaju izvođenje se nazivaju objektno bazirani jezici.
- Modifikator
finalse koristi za klasu koja nije izvedena ni iz jedne klase. - Kada se neka klasa izvede iz klase X, potrebno je izvršiti ponovno prevođenje klase X.
7. zadatak
Šta ispisuje sledeći program?
#include <iostream>
using namespace std;
class B {
public:
B() { std::cout << "b"; }
};
class X : virtual public B {
public:
X() { std::cout << "x"; }
};
class Y : virtual public B {
public:
Y() { std::cout << "y"; }
};
class Z : public X, public Y {
public:
Z() { std::cout << "z"; }
};
int main() {
Z z;
}
Izaberite jedan odgovor:
- bxyz
- bxbyz
- byxz
- bybxz
- Program se ne prevodi.
8. zadatak
Koje tvrdnje u vezi operatora za dinamičku konverziju (dynamic_cast) su tačne?
Izaberite jedan ili više odgovora:
- Operator za dinamičku konverziju primenjen na referencu tipa osnovne klase pri neuspešnoj konverziji u referencu na izvedenu klasu baca izuzetak tipa
bad_cast. - Operator za dinamičku konverziju se mora primenjivati za svaku konverziju naviše (
upcast) koja se vrši u vreme izvršenja programa. - Operator za dinamičku konverziju se može primeniti na pokazivač ili referencu na objekat nepolimorfne osnovne klase.
- Operator za dinamičku konverziju primenjen na pokazivač tipa osnovne klase vraća
nullptrako konverzija u pokazivač tipa izvedene klase ne uspeva. - Operator za dinamičku konverziju garantuje da će se konverzija u vreme izvršenja pravilno izvršiti i da će objekat biti konvertovan u ciljni objekat.
9. zadatak
Ako su I1, I2, I3 i I4 klase izuzetaka i ako je u osnovnoj klasi A deklarisan metod:
virtual void m() throw (I1, I2, I3):
deklaracija metoda m() u izvedenoj klasi B može da bude:
Izaberite jedan ili više odgovora:
void m() noexcept:void m() throw ():void m() throw (I1, I2, I3):void m() throw (I1):void m() throw (I2, I4):
10. zadatak
Ako je generička klasa definisana na sledeći način:
template <class T> class K { void m(T t); };
metod m može da bude definisan izvan klase K na sledeći način:
Izaberite jedan odgovor:
void K::m(T t) { ... }template <class T> void K<T>::m(T t) { ... }void K<T>::m(T t) { ... }