OO1/K2 2023
Neki rok 20XX. godine održan je XX. meseca i trajao je XX.
- За питања са више одговора, тачни одговори су подебљани и уоквирени
- За питања за које се одговори уносе, тачни одговори су подвучени и сакривени, тако да се прикажу када изаберете тај текст (пример: овако)
- Притисните лево дугме испод за сакривање и откривање свих одговора, или десно дугме за укључивање и искључивање интерактивног режима:
1. zadatak
Koje od sledećih operatora je moguće preklopiti za klasne tipove?
- () (operator za poziv funkcija)
- -> (operator za posredan pristup članovima klase preko pokazivača)
- ?: (operator za uslovni izraz)
- :: (operator za razrešenje dosea)
- . (operator za pristup članu klase)
2. zadatak
Šta ispisuje sledeći program na programskom jeziku C++?
Napomena 1: Unarna varijanta operatora * ima viši prioritet u odnosu na binarnu
Napomena 2: Ukoliko smarate da se kod ne prevodi, upisati NP. Ukoliko smatrate da se dešava greška u izvršavanju upisati G.
#include <iostream>
using namespace std;
class A {
public:
friend const A& operator *(const A& a) {
cout << "1";
return a;
}
friend const A& operator*(const A &a1, const A& a2) {
cout << "2";
return a1;
}
};
int main() {
A x;
A *y = &x;
A **z = &y;
*x**y***z;
return 0;
}
Odgovor: 122 Objašnjenje: Dati izraz se evaluira kao: (*x) * (*y) * (**z). Samo u *x slučaju se poziva unarni * nad const A&, a u ostalim podizrazima imamo preklopljen binarni operator * nad dve const A&
3. zadatak
Šta važi za operator = na jeziku C++?
- Ukoliko ne postoji premeštajuća varijanta operatora dodela (suspendovana je i implicitna premeštajuća dodela) u slučaju kada je desni operand nestajuća vrednost (eng. expiring value), koristiće se postojeća kopirajuća varijanta operatora dodele
- Ukoliko operator nije eksplicitno definisan, na mestu poziva operatora će se pozvati konstruktor kopije
- Postoji kopirajuća i premeštajuća varijanta operatora =
- Operator je moguće preklopiti kao nestatički metod klase
- Operator je moguće preklopiti kao globalnu prijateljsku funkciju
4. zadatak
Koje od navedenih osobina su zajedničke za preklapanje operatora -> i prefiksnog ++ operatora?
- Preklapanjem je mouće promeniti prioritet operatora
- Preklapaju se kao binarni operatori
- Preklapaju se kao unarni operatori
- Moraju da se preklope kao statički metod klse
- Tip rezultata mora biti jednak tipu operanda
5. zadatak
Koje tvrdnje su tačne za programski jezik C++?
- Prilikom konstrukcije objekta jednostruko izvedene klase prvo se izvrašava telo konstruktora izvedene klase
- Konstruktor jednostruko izvedene klase koji nije delegirajući mora u listi inicijalizatora imati inicijalizator osnovne klase ukoliko osnovna klasa nema podrazumevani konstruktor
- Ukoliko osnovna klasa ima podrazumevani konstruktor, tada se nikada neće izvršavati nijedan konstruktor osnovne klase prilikom konstrukcije objekta izvedene klase.
- Ukoliko osnovna klasa ima dostupan podrazumevani konstruktor, tada je moguće definisati konstruktor izvedene klase sa praznom listom inicijalizatora
6. zadatak
Šta ispisuje dati program na programskom jeziku C++?
#include <iostream>
using namespace std;
class A {
protected:
int k;
public:
A(int kk) : k(kk++) {
k = ++kk;
}
};
class B : public A {
public:
B(int kk) : A(kk) { k = kk; }
int dohvatiK() { return k; }
};
int main() {
B b(2);
cout << b.dohvatiK();
}
Izaberite jedan odgovor:
- 2
- Dati program se ne prevodi
- 3
- 4
Objašnjenje: Kada se poziva konstruktor klase A, njemu se prosleđuje kopija vrednost kk, pa nikakvi bočni efekti nemaju uticaj na kk iz konstruktora B. Zatim se u telu konstruktora B k inicijalizuje na kk, čime se gazi bilo kakva dodela iz konstruktora A, jer k je zaštićen član pa je dostupan i u klasi A i u klasi B
6. zadatak
Za dati kod napisanna programskom jeziku C++ odrediti za koje definicije metoda m u klasi B će se navedeni program ispravno izvršavati (biti bez greške u prevođenju i izvršavanju, ignorisati curenje memorije)
#include <iostream>
using namespace std;
class A {
public:
virtual A* m(A& a) {return new A();}
};
class B : public A {
public:
// ovde nedostaje definicija metoda m
};
int main() {
B b;
b.m(b);
return 0;
}
Izaberite jedan ili više odgovora odgovor:
- void *m(A &a) override {return new B();}
- A *m(A &a) {return new B();}
- B *m(B &b) override {return new B();}
- B *m(A &a) override {return new B();}
- A *m(B &b) {return new B();}
Objašnjenje: Ako se redi nadjačavanje (override) potpis metoda mora biti identilan osim povratne vrednosti, koja ako je bila pokazivаč ili referenca na osnovnu klasu u osnovnom metodu, u nadjačanom metodu može biti referenca ili pokazivač na izvedenu klasu u nadjačanoj metodi. Ako nema ključne reči override onda se radi o preklapanju imena i potpis može biti proizvoljan.
2. zadatak
Ovako izgleda zadatak sa više tačnih odgovora od više ponuđenih (odgovori 1 i 3 su označeni kao tačni).
- Odgovor 1
- Odgovor 2
- Odgovor 3
- Odgovor 4
3. zadatak
Ovako izgledaju zadaci sa odgovorima ponuđenim u padajućem meniju.
- Ponuđeno 1 Odgovor 2
- Ponuđeno 2 Odgovor 1
- Ponuđeno 3 Odgovor 3
4. zadatak
Ovako izgleda zadatak gde se od korisnika očekuje da unese tačan odgovor, recimo na to šta ispisuje neki kod:
class Main {
public static void main(String[] args) {
System.out.println("Ovako izgleda blok koda.");
}
}
Odgovor: Odgovor na pitanje iznad ide ovde
Objašnjenje: Ovakvi zadaci gotovo obavezno moraju da imaju objašnjenje ispod.
5. zadatak
U zadatku može da postoji napomena na postavku ili rešenje zadatka.[1]
6. zadatak
7. zadatak
8. zadatak
9. zadatak
10. zadatak
Napomene
- ↑ Ovako izgleda jedna napomena.