ОО1/Питалице

Извор: SI Wiki
< ОО1
Датум измене: 1. фебруар 2021. у 21:13; аутор: KockaAdmiralac (разговор | доприноси) (Dodate neke pitalice sa rokova od prošle godine (od `<@696179488350011524>`))
Пређи на навигацију Пређи на претрагу

Na ovoj stranici skupljeni su razni ispitni primeri koji su se možda pojavili na ispitu ali im se ne zna rok pojavljivanja ili jednostavno nije bilo dovoljno dobro formulisanih pitalica iz tog roka kako bi se odvojili u stranicu roka.

  • 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:

1. zadatak

Šta je od navedenog tačno:

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

2. zadatak

Šta ispisuje sledeći kod:

#include <iostream>
using namespace std;

template <typename T> class Klasa {
public:
    template <typename U> void m (U u) { cout << "1"; }
    void m (int u) {cout << "2"; }
};

template <typename T> class Klasa <T*> {
public:
    template <typename U> void m (U u) { cout << "3"; }
    void m (int u) {cout << "4"; }
};

int main () {
    Klasa <int*>().m<float>(9);
    Klasa <int> ().m(9);
    Klasa <int> ().m('a');
    Klasa <int*>().m<int>(2);
}

Odgovor: 3213

3. zadatak

Šta ispisuje sledeći kod:

#include <iostream>
using namespace std;

class Klasa {};

int main () {
    try {
        try {
            cout << "0";
            throw Klasa();
            cout << "1";
        }
        catch (...) { cout << "2"; }
        cout << "3";
    }
    catch (Klasa i) {cout << "4"; }
    cout << "5";
    return 0;
}

Odgovor: 0235

4. zadatak

Šta važi za apstraktne klase?

  1. ne mogu se praviti objekti apstraktne klase zato što ona ne može imati destruktor
  2. natklasa apstraktne klase je obavezno apstraktna klasa
  3. klasa izvedena iz apstraktne klase mora da redefiniše sve nasleđene apstraktne metode
  4. ne mogu se stvarati objekti apstraktne klase već samo pokazivači i refence na nju, koji mogu pokazivati (upućivati) na objekte konkretnih izvedenih klasa koje nisu apstraktne

5. zadatak

Šta ispisuje sledeći kod:

#include <iostream>
using namespace std;

void f() noexcept {}
void g() noexcept (!noexcept (f())) {}
void h() noexcept (noexcept (g())) {}
void m() noexcept (noexcept (f()) || noexcept (g())) {}

int main () {
    cout << (noexcept (f()) ? 1:0);
    cout << (noexcept (g()) ? 1:0);
    cout << (noexcept (h()) ? 1:0);
    cout << (noexcept (m()) ? 1:0);
    return 0;
}

Odgovor: 1001

6. zadatak

Šta ispisuje dati program:

#include <iostream>
using namespace std;

class A {
public:
    static int i;
    A() { i++; }
};
int A::i = 0;

class B : virtual public A {
public:
    B() { i++; }
};

class C : public A {
public:
    C() { i++; }
};

class D : public B, public C {
public:
    void pisi() { cout << i; }
};

int main () {
    D d;
    d.pisi();
    return 0;
}

Odgovor: 4

7. zadatak

Šta ispisuje sledeći kod:

#include <iostream>
using namespace std;

class A {
public:
    virtual void m() {}
};
class B : public A {};
class C : public B {};

int main () {
    A *pa = new B();
    B *pb = new C();
    B *b = dynamic_cast <B*>(pa);
    C *c = dynamic_cast <C*> (pa);
    C *d = dynamic_cast <C*> (pb);
    if (b == nullptr) cout << 'b';
    if (c == nullptr) cout << 'c';
    if (d == nullptr) cout << 'd';
    return 0;
}
  1. baca se izuzetak bad_cast
  2. d
  3. cd
  4. c
  5. bcd

8. zadatak

Šta ispisuje sledeći kod:

#include <iostream>
using namespace std;

class A {
public:
    A(int i) {
        if (i < 5) cout << 'a';
        else throw 'b';
    }
};

int main() {
    int i = 1;
    if (noexcept(A(i++))) cout << i;
    else cout << 2*i;
    return 0;
}

Odgovor: 2

9. zadatak

(Oktobar 2020, 9. zadatak) Zaokružiti ispravne izraze, ako je dat sledeći kod:

template <typename T=int, int k=10>
class Niz { T niz[k]; };
  1. Niz<int*, 20> n1;
  2. Niz<int*&, 20> n2;
  3. Niz<20> n3;
  4. Niz<> n4;
  5. Niz<double, 5.5> n5;
  6. Niz n6;

Napomena: Odgovor pod f) se prevodi samo od C++17 i novijih standarda.

10. zadatak

Šta ispisuje sledeći kod:

#include <iostream>
using namespace std;

class O {};
class I: public O {};

int main() {
    try {
        throw I();
        cout << "1";
    }
    catch(O o) {
        cout << "5";
        try {
            throw I();
            cout << "3";
        }
        catch(I i) { cout << "2"; }
    }
    catch(I i) { cout << "4"; }
    cout << "8";
    return 0;
}

Odgovor: 528

11. zadatak

Šta ispisuje sledeći program:

#include <iostream>
using namespace std;

class A {
public:
    virtual void m1() = 0;
    virtual void m2() = 0;
};
class B : public A {
public:
    void m1() { cout << "1"; }
};
class C : public A {
public:
    void m2() { cout << "2"; }
};
class D : public B, public C {
public:
    void m2() { cout << "3"; }
};
int main(){
    D d;
    d.m2();
    return 0;
}

Odgovor: Ne prevodi se, D je apstraktna klasa

12. zadatak

(Jul 2020, 10. zadatak) Šta važi za osnovnu i izvedenu klasu, ako obe imaju prazna tela, a izvođenje je javno:

  1. Izvedena klasa nasleđuje konstruktor
  2. Izvedena klasa ne nasleđuje destruktor
  3. Izvedena klasa ima podrazumevani konstruktor sa praznim telom
  4. Izvedena klasa ima destruktor koji ima prazno telo
  5. Izvedena klasa ima automatski generisan kopirajući konstruktor

13. zadatak

Šta ispisuje sledeći program:

#include <iostream>
using namespace std;

class X {
public:
    X() {}
    void m(int i) {
        try {
            if (i == 2) throw 2;
            cout << "1" << endl;
        }
        catch (double k) { cout << "2" << endl; }
    }
};

int main() {
    X x;
    try {
        x.m(2);
    }
    catch (int k) { cout << "3" << endl; }
    return 0;
}

Odgovor: 3

14. zadatak

Koliko će se zvezdica ispisati?

#include <iostream>
using namespace std;

void f(int i, int& j) { i++; j++; }

int main(){
    for (int i = 0, j = 0; i < 3 && j < 4; f(i, j))
        cout << '*';
    return 0;
}

Odgovor: 4

15. zadatak

Šta ispisuje sledeći program:

#include <iostream>
using namespace std;

class A {
    int x, y;
public:
    A(int xx, int yy) : x(xx) , y(yy){}
    double div() { if (y == 0) throw x; return x/y; }
    int mod() { if (y == 0) throw 0; return x % y; }
};

int main() {
    A a(4, 0), aa(3, 5);
    try { cout << a.div(); } catch(int x) { cout << x; }
    try { cout << a.mod(); } catch(int x) { cout << x; }
    try { cout << aa.div(); } catch(int x) { cout << x; }
    try { cout << aa.mod(); } catch(int x) { cout << x; }
    return 0;
}

Odgovor: 4003

16. zadatak

Zaokruži tačna tvrđenja:

  1. Generičke funkcije ubrzavaju izvršavanje programa
  2. Generičke funkcije ubrzavaju prevođenje
  3. Generičke funkcije i klase omogućavaju bolju reupotrebu koda
  4. Generički mehanizam omogućava generisanje funkcija sa različitim tipovima parametara u toku izvršavanja programa

17. zadatak

Zaokruži tačna tvrđenja:

template <typename T>
void swap (T *a, T *b){
    T c;
    for (int i = 0; i < n; i++) {
        c = a[i];
        a[i] = b[i];
        b[i] = c;
    }
}

Za klasu T mora da postoji:

  1. Podrazumevani konstruktor
  2. Operator dodele vrednosti
  3. Operator []
  4. Kopirajući konstruktor
  5. Metoda koja vrši polimorfnu kopiju

18. zadatak

(Septembar 2020, 6. zadatak) Ako je exception klasa izuzetaka i iz nje je izvedena klasa I, a iz klase I dalje izvedena klasa II, kojim redosledom treba navesti rukovaoce izuzecima (zaokružiti jedno ili više):

  1. exception, I , II , ...
  2. II, I, exception, ...
  3. I, II , exception, ...
  4. II, I, ..., exception
  5. ..., exception, I, II

19. zadatak

Šta ispisuje sledeći program:

#include <iostream>
using namespace std;

template<class T, class U, int I> struct X {
    void f() { cout << "Osnovni sablon" << endl; }
};
template<class T, int I> struct X<T, T*, I> {
    void f() { cout << "Specijalizacija 1" << endl; }
};
template<class T> struct X<int, T*, 10> {
    void f() { cout << "Specijalizacija 2" << endl; }
};

int main() {
    X<int, int*, 10> f;
    f.f();
    return 0;
}
  1. Specijalizacija 1
  2. Specijalizacija 2
  3. Greška jer se pristupa privatnom polju
  4. Greška zbog dvoznačnosti šablona

20. zadatak

Šta ispisuje sledeći program:

#include <iostream>
using namespace std;

void fun(int p) {
    try {
        throw p;
    }
    catch (int p) { cout << ++p; throw; }
}

int main() {
    int p = 1;
    try {
        try {
            fun(p);
            cout << ++p;
        }
        catch (int p) { cout << ++p; }
        cout << ++p;
    }
    catch (int p) { cout << ++p; }
    return 0;
}

Odgovor: 222

21. zadatak

Šta ispisuje sledeći program:

#include <iostream>
using namespace std;

int main() {
    int x = 10;
    double y = 1.5;
    decltype(++x - y) a = y-- + 5;
    cout << x << ' ' << y << ' ' << a;
    return 0;
}

Odgovor: 10 0.5 6.5

22. zadatak

Šta ispisuje sledeći program:

#include <iostream>
using namespace std;

class Klasa {};
class Izvedena : public Klasa {};

int main() {
    try {
        throw Izvedena();
    }
    catch (Izvedena * i) { cout << "3"; }
    catch (Klasa i) { cout << "4"; }
    catch (Izvedena i) { cout << "5"; }
    return 0;
}

Odgovor: 4

23. zadatak

Šta je problem kod definicije funkcije:

class X {
public:
    X operator+(const X& x) const;
};
  1. Ispravna je
  2. Nije ispravna jer za binarni operator + fali još jedan argument
  3. Nije ispravna jer nisu obezbeđene bočne vrednosti
  4. Nije ispravna jer ova funkcija MORA da vraća referencu na lvrednost

24. zadatak

Šta od sledećeg važi za destruktore:

  1. Destruktor nema argumente
  2. Destruktor može imati jedan argument ako ima podrazumevanu vrednost
  3. Destruktor vraća void
  4. Destruktor se može eksplicitno pozvati

25. zadatak

Šta ispisuje sledeći program:

#include <iostream>
using namespace std;

class A {
    int i;
public:
    A(int ii) : i(ii) { cout << i; }
};

class B {
    A a1, a2;
public:
    B(A a11=A(5), A a22=A(6)) : a1(a11), a2(a22) {}
};

int main() {
    int i = 7;
    A a(i);
    B b(a);
    return 0;
}

Odgovor: 76

26. zadatak

Šta ispisuje sledeći kod:

#include <iostream>
using namespace std;

class X {
public:
    X(int a, int b=0) {
        cout << "1";
    }
    X() { cout << "2"; }
    X(double d) { cout << "3"; }
    X(const X &X) { cout << "4"; }
};

int main() {
    X X1, X2(1), X3(X1), X4(.5);
    return 0;
}

Odgovor: 2143

27. zadatak

Šta je problem kod definisanja operatora +?

class Klasa {
public:
    Klasa operator+(const Klasa& k1, const Klasa& k2);
};

Odgovor: Promena n-arnosti operatora.

28. zadatak

int a = 5;
int& b = a;
int* c = &a;
  1. nijedna
  2. c--
  3. a--
  4. (*c)--
  5. c = a-1

29. zadatak

Kako se pravilo definiše niz od n celih brojeva, ako n zadaje korisnik tokom izvršavanja?

Odgovor: int *niz = new int[n];

30. zadatak

Šta ispisuje sledeći kod:

class K {
public:
    K(int k) { cout << k; }
};
class A {
    K k2 = 1, k1 = 2;
public:
    A(int i, int j) : k1(i), k2(j) {}
};
int main() {
    A a(3, 4);
    return 0;
}

Odgovor: 43

31. zadatak

Šta ispisuje sledeći kod:

#include <iostream>
using namespace std;

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

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

Odgovor: ABAC

32. zadatak

(Jul 2020, 7. zadatak) Da li su sledeći mehanizmi statički ili dinamički?

  • Generici - statički
  • Preklapanje operatora - statički
  • Polimorfizam - dinamički
  • Preklapanje imena funkcija - statički
  • Obrada izuzetaka - dinamički

33. zadatak

Koje osobine su zajedničke za operatore () i ->:

  1. preklapaju se kao binarni
  2. mogu se preklopiti kao globalna prijateljska funkcija
  3. tip rezultata mora biti jednak tipu operanda
  4. preklapanjem nije moguće promeniti prioritet operatora
  5. rezultat mora biti pokazivačkog tipa

34. zadatak

Zašto u C++ definicija promenljive može stajati bilo gde u bloku a ne samo na početku bloka?

Odgovor: Zato što je naredba

35. zadatak

class T {
public:
    void m(int x) const;
};

Kog je tipa this u metodu m?

  1. T*
  2. const T*
  3. const T&
  4. const T* const
  5. T* const

36. zadatak

Šta ispisuje sledeći kod:

#include <iostream>
using namespace std;

class A {
private:
    int i;
public:
    A(int ii) { i = ii; }
    int dohvati() { return i; }
    int operator()() { return 3; }
};
static int a() { return 4; }

int main() {
    A a(2);
    cout << a();
    return 0;
}

Odgovor: 3

37. zadatak

Koju vrednost će imati reg_br?

class A {
    static int reg_br;
    int id = reg_br++;
    int i;
public:
    A(int ii) { i = ii; reg_br = 5; }
};

int A::reg_br = 2;

int main() {
    A a(2);
    return 0;
}

Odgovor: 5

38. zadatak

Koje tvrdnje za statički kast su tačne?

  1. Koristi se za uklanjanje/dodavanje modifikatora const nekom tipu
  2. Koristi se za konverzije između numeričkih tipova
  3. Koristi se za korisničke konverzije
  4. Koristi se za konverzije tipova podataka koji nisu u logičkoj vezi
  5. Koristi se za konverzije između pokazivačkih tipova
  6. Koristi se za prenosive konverzije
  7. Koristi se za neprenosive konverzije

39. zadatak

Konstruktor neke klase se izvršava:

  1. Kada se izvršava definicija statičkog objekta neke klase
  2. Kada se vrši dodela vrednosti objektu date klase
  3. Kada se konstruktor eksplicitno pozove i stvori se privremeni objekat date klase
  4. Kada se stvara dinamički objekat date klase
  5. Kada se vrši prenos argumenta u parametar date klase po vrednosti
  6. Kada se iz funkcije vraća rezultat tipa date klase po vrednosti

40. zadatak

Koje tvrdnje su ispravne:

  1. Doseg globalne promenljive je od definicije do kraja fajla u kojem je definisana
  2. Doseg klasnog atributa je od mesta gde je naveden do kraja definicije klase
  3. Doseg promenljive definisane u definicije for petlje, prema standardu, je do kraja okružujućeg bloka for petlje
  4. Doseg lokalne promenljive je od početka do kraja bloka u kojem je definisana
  5. Doseg labele je od mesta gde je definisana do kraja tela funkcije

41. zadatak

Upućivač (referenca) na dvrednost je dvrednost:

  1. Tačno
  2. Netačno

42. zadatak

Koje tvrdnje su ispravne:

  1. Objekat klase mora ispoljavati polimorfno ponašanje
  2. Objekat klase je opis korisničkog struktuiranog tipa
  3. Objekat klase je nešto (u memoriji) što ima stanje, ponašanje i identitet
  4. Objekat klase je opis ponašanje srodnih primeraka neke apstrakcije
  5. Objekat u širem smislu je podatak određenog tipa koji u vreme izvršavanja programa ima određeno mesto u memoriji

43. zadatak

(Jul 2020, 1. zadatak) Šta se u kom koraku istorijata objekte paradigme desilo:

Date opcije
Apstrakcija Programski jezik
  • Apstrakcija izraza e.
  • Apstrakcija kontrole f.
  • Apstrakcija podataka b.
  1. COBOL
  2. Pascal
  3. Simula 67
  4. Ada
  5. FORTRAN
  6. Algol60

44. zadatak

(Jul 2020, 3. zadatak) Kako se iz glavne funkcije može pristupiti tmp?

namespace A {
    namespace B {
        int tmp = 2;
    }
}

Odgovor: A::B::tmp

45. zadatak

(Septembar 2020, 1. zadatak) Šta ispisuje sledeći program:

#include <iostream>
using namespace std;

class X {
public:
    X() { cout << 'X'; }
    X(char c) { cout << 'X' << c; }
};

class A : virtual X {
public:
    A() : X('a') { cout << 'A'; }
};

class B : X {
public:
    B() : X('b') { cout << 'B'; }
};

class C : virtual X {
public:
    C() : X('c') { cout << 'C'; }
};

class Y : A, virtual B, C {
public:
    Y() { cout << 'Y'; }
};

int main() {
    Y y;
	return 0;
}

Odgovor: XXbBACY

46. zadatak

(Septembar 2020, 4. zadatak) Stvarni argument šablona može biti:

  1. Ime šablonske klase
  2. Ime prave klase
  3. Funkcija
  4. Šablonska klasa s parametrima
  5. Parametar