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

Извор: SI Wiki
< ОО1
Датум измене: 31. јануар 2021. у 16:16; аутор: KockaAdmiralac (разговор | доприноси) (Dovršene pitalice sa telekom drajva)
Пређи на навигацију Пређи на претрагу

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

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

Š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

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