OO1/K2 2023

Izvor: SI Wiki
< ОО1
Datum izmene: 7. decembar 2023. u 22:03; autor: KockaAdmiralac (razgovor | doprinosi) (KockaAdmiralac преместио је страницу OO2/К2 2023 на ОО1/К2 2023 без остављања преусмерења: Pogrešan predmet)
Pređi na navigaciju Pređi na pretragu

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?

  1. () (operator za poziv funkcija)
  2. -> (operator za posredan pristup članovima klase preko pokazivača)
  3. ?: (operator za uslovni izraz)
  4. :: (operator za razrešenje dosea)
  5. . (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++?

  1. 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
  2. Ukoliko operator nije eksplicitno definisan, na mestu poziva operatora će se pozvati konstruktor kopije
  3. Postoji kopirajuća i premeštajuća varijanta operatora =
  4. Operator je moguće preklopiti kao nestatički metod klase
  5. Operator je moguće preklopiti kao globalnu prijateljsku funkciju

4. zadatak

Koje od navedenih osobina su zajedničke za preklapanje operatora -> i prefiksnog ++ operatora?

  1. Preklapanjem je mouće promeniti prioritet operatora
  2. Preklapaju se kao binarni operatori
  3. Preklapaju se kao unarni operatori
  4. Moraju da se preklope kao statički metod klse
  5. Tip rezultata mora biti jednak tipu operanda

5. zadatak

Koje tvrdnje su tačne za programski jezik C++?

  1. Prilikom konstrukcije objekta jednostruko izvedene klase prvo se izvrašava telo konstruktora izvedene klase
  2. Konstruktor jednostruko izvedene klase koji nije delegirajući mora u listi inicijalizatora imati inicijalizator osnovne klase ukoliko osnovna klasa nema podrazumevani konstruktor
  3. Ukoliko osnovna klasa ima podrazumevani konstruktor, tada se nikada neće izvršavati nijedan konstruktor osnovne klase prilikom konstrukcije objekta izvedene klase.
  4. 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:

  1. 2
  2. Dati program se ne prevodi
  3. 3
  4. 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:

  1. void *m(A &a) override {return new B();}
  2. A *m(A &a) {return new B();}
  3. B *m(B &b) override {return new B();}
  4. B *m(A &a) override {return new B();}
  5. 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).

  1. Odgovor 1
  2. Odgovor 2
  3. Odgovor 3
  4. Odgovor 4

3. zadatak

Ovako izgledaju zadaci sa odgovorima ponuđenim u padajućem meniju.

  1. Ponuđeno 1 Odgovor 2
  2. Ponuđeno 2 Odgovor 1
  3. 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

  1. Ovako izgleda jedna napomena.