ОО1/К1 2020 — разлика између измена

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу
м (Ispravka zatvarajućeg <div>)
м (Objašnjenja)
 
Ред 16: Ред 16:
# <code>int</code>
# <code>int</code>
# <code>const int</code>
# <code>const int</code>
# <span class="solution"><code>int*</code></span>
# <code class="solution">int*</code>
# <code>const int*</code>
# <code>const int*</code>
# Program se ne prevodi.
# Program se ne prevodi.
</div>
</div>
Objašnjenje: <span class="spoiler" data-solution="explanation">Vrednost <code>p</code> će biti pokazivač pomeren za <code>k</code>.</span>


=== 2. zadatak ===
=== 2. zadatak ===
Ред 40: Ред 41:
# 5
# 5
</div>
</div>
Objašnjenje: <span class="spoiler" data-solution="explanation">Funkcija prima referencu na lvrednost a 2 je dvrednost.</span>


=== 3. zadatak ===
=== 3. zadatak ===
Ред 103: Ред 105:
# Više od 5.
# Više od 5.
</div>
</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 ==
Ред 134: Ред 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 ===
Ред 214: Ред 218:
# 4
# 4
</div>
</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 ===
=== 8. zadatak ===
Ред 238: Ред 243:
</syntaxhighlight>
</syntaxhighlight>
Odgovor: <span class="spoiler" data-solution="text">132</span>
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 ===
=== 9. zadatak ===
Ред 262: Ред 269:
}
}
</syntaxhighlight>
</syntaxhighlight>
<div class="abc-list" data-solution="single">
<div class="abc-list" data-solution="multiple">
# <code> f(); </code>  
# <code>f();</code>
# <code> A a; f(a); </code>  
# <code>A a; f(a);</code>
# <span class="solution"> <code>f(A()); </code> </span>
# <code class="solution">f(A());</code>
# <code>f(A); </code>  
# <code>f(A);</code>
</div>
</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 ===

Тренутна верзија на датум 31. јануар 2022. у 22: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;
}
  1. int
  2. const int
  3. int*
  4. const int*
  5. 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);
}
  1. 6
  2. 0
  3. Program se ne prevodi.
  4. 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?

  1. ...
  2. ...
  3. int * const &simbol[]
  4. Deklaracija za simbol se ne prevodi.

?. zadatak

Isti zadatak se našao i na probnom kolokvijumu za IR.

Koje tvrđenje je tačno?

  1. Mehanizam preklapanje[sic] imena funkcija je potpuno statički, koja funkcija će se pozvati određuje se u vreme prevođenja.
  2. Mehanizam preklapanje[sic] imena funkcija je potpuno dinamički, koja funkcija će se pozvati određuje se u vreme izvršavanja.
  3. Mehanizam preklapanje[sic] imena funkcija je potpuno statički, koja funkcija će se pozvati određuje se u vreme izvršavanja.
  4. 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++?

  1. Metodi int f() & { return 1; } i int f() && { return 3; } mogu postojati u istoj klasi.
  2. Metodi int f() & { return 1; } i int f() const & { return 3; } mogu postojati u istoj klasi.
  3. Metodi int f() & { return 1; } i void 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. 1
  2. 2
  3. 5
  4. 3
  5. 4
  6. 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++:

  1. Moguće je definisati referencu na pokazivač.
  2. Moguće je definisati niz referenci.
  3. Moguće je definisati referencu na referencu.
  4. 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);
}
  1. 6
  2. 0
  3. Program se ne prevodi.
  4. 5

Objašnjenje: x++ vraća dvrednost, a ne lvrednost.

4. zadatak

Povezati tvrdnje u vezi sa modifikatorima metoda:

Modifikatori
  1. volatile b
  2. const e
  3. & g
  4. && f
  1. Metoda se može zvati samo ako je tekući objekat pokazivač.
  2. Oznaka kompajleru da ne vrši optimizacije.
  3. Oznaka kompajleru da vrši optimizacije.
  4. Metoda je mutator.
  5. Metoda je inspektor.
  6. Metoda se može zvati samo ako je tekući objekat dvrednost.
  7. Metoda se može zvati samo ako je tekući objekat lvrednost.
  8. Metoda se može zvati samo ako je tekući objekat konstantan.

5. zadatak

Zaokružiti tačne tvrdnje u vezi sa pomerajućim konstruktorom na jeziku C++:

  1. Definisanjem podrazumevanog konstruktora briše se ugrađeni premeštajući konstruktor.
  2. Definisanjem kopirajućeg konstruktora briše se ugrađeni premeštajući konstruktor.
  3. Pomerajući konstruktor mora da ima samo jedan parametar.

6. zadatak

Zaokružiti tačne tvrdnje u vezi sa funkcijama na jeziku C++:

  1. Mogu se definisati više funkcija istog imena ako imaju različiti broj parametara bez podrazumevanih vrednosti.
  2. Mogu se definisati više funkcija istog imena ako su im različite povratne vrednosti.
  3. Ne mogu se definisati više funkcija istog imena, jer kompajler ne bi mogao da ih raspozna.
  4. 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. 1
  2. 2
  3. Program se ne prevodi
  4. 3
  5. 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;
}
  1. f();
  2. A a; f(a);
  3. f(A());
  4. 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++:

  1. U definiciji klase se mogu definisati promenljiva statička polja.
  2. Doseg imena statičkog polja je klasa.
  3. Statičkom polju s iz klase K se pristupa koristeći izraz K.s.