ОО1/Пробни тестови 2020 — разлика између измена

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу
(dodat 2. probni klk)
м (→‎Drugi test: iščešljavanje manjih grešaka)
Ред 203: Ред 203:


=== 3. zadatak ===
=== 3. zadatak ===
Šta ispisuje sledeći program na programskom jeziku C+? Ukoliko se program ne prevodi u polje za odgovor treba upisati vrednost 0.
Šta ispisuje sledeći program na programskom jeziku C++? Ukoliko se program ne prevodi u polje za odgovor treba upisati vrednost 0.
<syntaxhighlight lang="cpp">
<syntaxhighlight lang="cpp">
#include <iostream>
#include <iostream>
Ред 271: Ред 271:
#include <iostream>
#include <iostream>
using namespace std;
using namespace std;
class A {
class A {
public:
public:
Ред 291: Ред 292:
}
}
</syntaxhighlight>
</syntaxhighlight>
Odgovor: <span class="spoiler">ACABACAB</span>
Izaberite jedan odgovor:
<div class="abc-list">
# CAABCAAB
# ACBACB
# AACBAACB
# <span class="solution">ACABACAB</span>


=== 8. zadatak ===
=== 8. zadatak ===
Ред 323: Ред 329:


=== 9. zadatak ===
=== 9. zadatak ===
Šta treba da stoji umesto *** da bi dati program na jeziku C++ ispisao BA?
Šta treba da stoji umesto *** da bi dati program na jeziku C++ ispisao BA? Izaberite jedan ili više odgovora.
<syntaxhighlight lang="cpp">
<syntaxhighlight lang="cpp">
#include <iostream>
#include <iostream>
using namespace std;
using namespace std;
class A {
class A {
public:
public:
Ред 348: Ред 355:


=== 10. zadatak ===
=== 10. zadatak ===
Koje su tvrdnje tačne?
Koje tvrdnje su tačne?
<div class="abc-list">
<div class="abc-list">
# <span class="solution">Višestrukim izvođenjem se smatra izvođenje iz više klasa koje nisu u uzajamnom odnosu izvođenja (nasleđivanja).</span>
# <span class="solution">Višestrukim izvođenjem se smatra izvođenje iz više klasa koje nisu u uzajamnom odnosu izvođenja (nasleđivanja).</span>
# Višestrukim izvođenjem se smatra izvođenje u koje je jedna klasa roditelj većeg broja klasa.
# Višestrukim izvođenjem se smatra izvođenje u kojem je jedna klasa roditelj većeg broja klasa.
# Višestrukim izvođenjem se smatra izvođenje iz već izvedene klase.
# Višestrukim izvođenjem se smatra izvođenje iz već izvedene klase.
# Višestrukim izvođenjem se smatra izvođenje iz klase iz koje su već izvedene neke druge klase.
# Višestrukim izvođenjem se smatra izvođenje iz klase iz koje su već izvedene neke druge klase.
# <span class="solution">Višestrukim izvođenjem se nasleđuju ugovori i implementacije svih roditeljskih klasa.</span>
# <span class="solution">Višestrukim izvođenjem se nasleđuju ugovori i implementacije svih roditeljskih klasa.</span>
</div>
</div>


== IR kolokvijum ==
== IR kolokvijum ==

Верзија на датум 12. децембар 2020. у 16:47

  • Za pitanja sa više odgovora, tačni odgovori su podebljani i uokvireni.
  • Za pitanja za koje se odgovori unose, tačni odgovori su podvučeni i sakriveni: ovako.
  • Pritisnite na sledeće dugme kako biste ih sakrili ili otkrili:

Prvi test

Na svakom pitanju je bilo ili moguće izabrati jedno ili više rešenja ili uneti odgovor u polje.

1. zadatak

Prilikom reupotrebe objektno orijentisanog koda izvođenjem, u načelu se stari kod (postojeća klasa - osnova za izvođenje):

  1. ne mora menjati ni ponovo prevoditi i testirati.
  2. ne mora menjati, ali se mora ponovo prevoditi i testirati.
  3. ne mora menjati, mora ponovo prevoditi, ali se ne mora ponovo testirati.
  4. mora menjati i ponovo prevoditi i testirati.
  5. uopšte ne može iskoristiti.

2. zadatak

Koja naredba omogućava korišćenje imena X iz prostora imena Y prostim imenovanjem X, ukoliko ne postoji konflikt imena?

  1. decltype Y;
  2. using namespace Y;
  3. using Y::X;
  4. namespace Y.X;
  5. using Y;

3. zadatak

Šta ispisuje sledeći program na jeziku C++?

#include <iostream>
struct S1{
  int a;
  int b;
};

struct S2{
  S1 a;
  int b[3][2];
};

int main() {
  S2 s={1,2,{{3},{},{4,5}}};
  std::cout<<s.b[2][0];
}

Odgovor: 4

4. zadatak

Šta je dozvoljeno da stoji na mestu naredbe ###?

#include <iostream>
struct A{
    A(){}; //podrazumevani konstruktor strukture A
    int x;
    const int y=1;
    mutable int z;
};

int main(){
    A a1;
    const A a2;
    ###
}
  1. a2.z=1;
  2. a1.y=1;
  3. a2.y=1;
  4. a1.x=1;
  5. a1.z=1;
  6. a2.x=1;

5. zadatak

Koje funkcije su ispravne, jer vraćaju referencu na "živ" objekat?

  1. int& f(int &i){int r=i; return r; }
  2. int& f(int i){return i; }
  3. int& f(int &i){return *new int(i); }
  4. int& f(int &i){int &r=*new int(i); return r; }
  5. int& f(int &i){return i; }
  6. int& f(int &i){int r=*new int(i); return r; }

6. zadatak

Koji od sledećih iskaza su tačni na jeziku C++?

  1. Klasa može imati više privatnih sekcija.
  2. Iz metoda pozvanog za neki objekat se ne može pristupiti privatnom atributu drugog objekta iste klase.
  3. Javnoj sekciji klase mogu pristupati samo javni metodi klase, a privatnoj sekciji samo privatni metodi.
  4. Članovima u privatnoj sekciji klase može pristupati samo javni metod iste klase.
  5. Podrazumevana sekcija klase je javna.

7. zadatak

Za nepromenljiv i nepostojan (const volatile) objekat klase mogu da se pozivaju metodi te klase sa navedenim sledećim modifikatorima (koji određuju prirodu tekućeg objekta):

  1. inline
  2. const
  3. volatile
  4. const volatile
  5. bez modifikatora

8. zadatak

Neka je data definicija klase Test

class Test{
    Test(){}
};

Za koje od sledećih linija koda u funkciji main() će prevodilac prijaviti grešku?

  1. Test test;
  2. Test* test = new Test();
  3. Test test();
  4. Test* test;
  5. Test test{};

9. zadatak

Šta ispisuje dati program na jeziku C++?

#include <iostream>
using namespace std;

class A {
public:
    A() { cout << "A"; }
    A(int a) { cout << "A" << a; }
};

class B {
    A a;
public:
    B() { cout << "B"; }
    B(int b) { cout << "B" << b; }
};

class C {
    B b;
    A a;
public:
    C() { cout << "C"; }
    C(int c) : a(c) { cout << "C" << c; }
};

int main() {
    C c(1);
    return 0;
}

Odgovor: ABA1C1

10. zadatak

Koja tvrđenja su tačna za dati programski kod napisan na jeziku C++?

class A {
   int i;
public:
   A(int ii=2) { i = ii; }
};
  1. Klasa A ima konverzioni konstruktor.
  2. Klasa A ima jedan konstruktor.
  3. Objekat klase A se može stvoriti pozivanjem konstruktora koji nema nijedan parametar.
  4. Objekat klase A se može stvoriti pozivanjem konstruktora koji ima jedan argument.
  5. Klasa A nema podrazumevani konstruktor.

Drugi test

1. zadatak

Koji od sledećih operatora se moraju preklopiti kao nestatički metodi u jeziku C++? Izaberite jedan ili više odgovora.

  1. a.operator()
  2. b.operator[]
  3. c.operator<<
  4. d.operator=
  5. e.operator+

2. zadatak

Povezati operatore sa odgovarajućom tipičnom primenom:

Operatori
Asocijativni pristup elementu zbirke a.

Računanje vrednosti polinoma u tački b.

Pametni pokazivač c.

  1. operator[]
  2. operator()
  3. operator->

3. zadatak

Šta ispisuje sledeći program na programskom jeziku C++? Ukoliko se program ne prevodi u polje za odgovor treba upisati vrednost 0.

#include <iostream>

class B;

class A {
public: 
    A(int i) {}
    A(const B &b) { std::cout << "1"; }
    A& operator=(const A& a) { std::cout << "2"; return *this; }
};

class B {
public: 
    operator A() { std::cout << "3"; return 1; }
};

int main() {
    B b;
    A a(1);
    a=b;
}

Odgovor: 32

4. zadatak

Koje tvrdnje su tačne? Izaberite jedan ili više odgovora.

  1. Operator delete može imati proizvoljan broj argumenata.
  2. U preklopljenom operatoru new treba, kao poslednju naredbu, napisati eksplicitan poziv konstruktora klase za koju se operator preklapa.
  3. Klasa može imati više preklopljenih delete operatora za pojedinačne objekte.
  4. Operatori new i delete se preklapaju kao statički metodi klase.
  5. Klasa može imati više preklopljenih operatora new za nizove.

5. zadatak

Koja od sledećih tvrdnji u vezi izvođenja klasa su tačna u jeziku C++? Izaberite jedan ili više odgovora:

  1. Iz klase označene modifikatorom final nije moguće dalje izvođenje.
  2. Dozvoljeno je sledeće izvođenje:
class A : B { };
class B : A { };
  1. Podrazumevan način izvođenja je zaštićen (protected).
  2. Izvedena klasa ne nasleđuje konstruktore, destruktor i operatore operator= iz osnovne klase.
  3. Izvođenje može biti javno (public), zaštićeno (protected) ili privatno (private).

6. zadatak

Koji iskazi su tačni? Izaberite jedan odgovor:

  1. Privatnim izvođenjem uspostavlja se relacija sadržanja između objekta izvedene klase i nasleđenog podobjekta osnovne klase.
  2. Objekat zaštićeno izvedene klase je jedna vrsta objekta osnovne klase u svakoj globalnoj funkciji.
  3. Objekat javno izvedene klase nasleđuje samo implementaciju osnovne klase, ne i ugovor.
  4. Kod privatnog izvođenja nasleđuje se ugovor osnovne klase.
  5. Javnim izvođenjem se samo uspostavlja relacija sadržanja između objekta izvedene klase i nasleđenog podobjekta osnovne klase.

7. zadatak

Šta ispisuje sledeći program na jeziku C++?

#include <iostream>
using namespace std;

class A {
public:
    A() { cout << "A"; }
};

class C {
public:
    C() { cout << "C"; }
};

class B: public A {
    C c; A a;
public:
    B():c(), A(), a() { cout << "B"; }
};

int main() {
    B b[2];
}

Izaberite jedan odgovor:

  1. CAABCAAB
  2. ACBACB
  3. AACBAACB
  4. ACABACAB

8. zadatak

Šta ispisuje sledeći programski kod:

#include <iostream>
using namespace std;

class O {
public:
    virtual void m() { cout << "1"; }
};

class I : public O {
public:
    virtual void m() override { cout << "2"; }
};

int main() {
    O * p = new I();
    O o = *p;
    
    p->m();
    (*p).m();
    o.m();
    
    return 0;
}

Odgovor: 221

9. zadatak

Šta treba da stoji umesto *** da bi dati program na jeziku C++ ispisao BA? Izaberite jedan ili više odgovora.

#include <iostream>
using namespace std;

class A {
public:
    ***
};
class B: public A {
public:
    ~B() { cout << "B"; }
};
int main() {
    A *a = new B();
    delete a;
}
  1. ~A() { cout << "A"; }
  2. ~A() { cout << "BA"; }
  3. virtual ~A() { cout << "BA"; }
  4. virtual ~A() { cout << "A"; }

10. zadatak

Koje tvrdnje su tačne?

  1. Višestrukim izvođenjem se smatra izvođenje iz više klasa koje nisu u uzajamnom odnosu izvođenja (nasleđivanja).
  2. Višestrukim izvođenjem se smatra izvođenje u kojem je jedna klasa roditelj većeg broja klasa.
  3. Višestrukim izvođenjem se smatra izvođenje iz već izvedene klase.
  4. Višestrukim izvođenjem se smatra izvođenje iz klase iz koje su već izvedene neke druge klase.
  5. Višestrukim izvođenjem se nasleđuju ugovori i implementacije svih roditeljskih klasa.

IR kolokvijum

1. zadatak

Prostor na steku se dodeljuje:

  1. Lokalnim statičkim objektima
  2. Globalnim statičkim objektima
  3. Argumentima (parametrima) funkcija
  4. Dinamičkim objektima
  5. Lokalnim automatskim objektima

2. zadatak

Šta ispisuje sledeći program na programskom jeziku C++?

#include <iostream>
int& f(int &x) {
    return ++x;
}
int main() {
    int x = 1;
    int z = 1;
    auto y = f(z);
    y++;
    std::cout << x << y << z;
}
  1. 133
  2. 233
  3. Programski kod se ne prevodi.
  4. 132
  5. 232

3. zadatak

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.

4. zadatak

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.

5. zadatak

Šta ispisuje sledeći program napisan na programskom jeziku C++? Ukoliko da se program ne prevodi unesite X.

#include <iostream>
using namespace std;

class A
{
private:
    int b = 2;
    int c = 3;
public:
    A() : c(b+1), b(7) { b--; a = 2; }
    void pisi() { cout << a << b << c; }
private:
    int a = 1;
};

int main()
{
    A obj;
    obj.pisi();
    return 0;
}

Odgovor: 268

6. zadatak

Šta ispisuje dati program na jeziku C++?

#include <iostream>
using namespace std;

class A {
    static int stID;
    int ID = ++stID;
public:
    A() {}
    A(const A& a) {}
    A(A&& a) {}
    ~A() { cout << ID; }
};

int A::stID = 0;

void f1(A& a) {}
void f2(A a) {}

int main() {
    A x;
    for(int i = 0; i < 3; i++){
        A* y = new A;
        if (i == 1) f2(*y);
        if (i == 2) f1(*y);
    }
    return 0;
}

Odgovor: 41

7. zadatak

Koja su tvrđenja tačna za prijateljske (friend) funkcije i klase?

  1. Ako je klasa A prijatelj klase B i klasa B prijatelj klase C, onda je i klasa A prijatelj klase C.
  2. Funkcija m() koja je prijatelj klasi A može biti globalna funkcija.
  3. Ako klasa A proglasi klasu B za prijatelja, metodi klase A imaju pristup do privatnih polja klase B
  4. Prijateljstvo između klasa je simetrična relacija.
  5. Funkcija m() koja je prijatelj klasi A može biti metod klase B.

8. zadatak

Koji od sledećih operatora se moraju preklopiti kao nestatički metodi u jeziku C++?

  1. operator[]
  2. operator=
  3. operator()
  4. operator+
  5. operator<<

9. zadatak

Povezati operatore sa odgovarajućom tipičnom primenom:

Operatori
Asocijativni pristup elementu zbirke a.

Računanje vrednosti polinoma u tački b.

Pametni pokazivač c.

  1. operator[]
  2. operator()
  3. operator->

10. zadatak

Šta ispisuje sledeći program na programskom jeziku C+? Ukoliko se program ne prevodi u polje za odgovor treba upisati vrednost 0.

#include <iostream>

class B;

class A {
public: 
    A(int i) {}
    A(const B &b) { std::cout << "1"; }
    A& operator=(const A& a) { std::cout << "2"; return *this; }
};

class B {
public: 
    operator A() { std::cout << "3"; return 1; }
};

int main() {
    B b;
    A a(1);
    a=b;
}

Odgovor: 32