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

Извор: SI Wiki
< ОО1
Датум измене: 1. фебруар 2021. у 06:00; аутор: KockaAdmiralac (разговор | доприноси) (Dodate Teodorove pitalice koje nisu već bile na telekom drajvu)
Пређи на навигацију Пређи на претрагу

На овој страници скупљени су разни испитни примери који су се можда појавили на испиту али им се не зна рок појављивања или једноставно није било довољно добро формулисаних питалица из тог рока како би се одвојили у страницу рока.

  • За питања са више одговора, тачни одговори су подебљани и уоквирени.
  • За питања за које се одговори уносе, тачни одговори су подвучени и сакривени: овако.
  • Притисните на следеће дугме како бисте их сакрили или открили:

1. задатак

Шта је од наведеног тачно:

  1. Објекат јавно изведене класе наслеђује само имплементацију основне класе, а не и уговор
  2. Објекат заштићене изведене класе је једна врста објекта основне класе у свакој глобалној функцији
  3. Код приватног извођења наслеђује се уговор основне класе
  4. Јавним извођењем само се успоставља релација садржаја између објекта изведене класе и наслеђеног подобјекта основне класе
  5. Ништа од понуђеног

2. задатак

Шта исписује следећи код:

#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);
}

Одговор: 3213

3. задатак

Шта исписује следећи код:

#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;
}

Одговор: 0235

4. задатак

Шта важи за апстрактне класе?

  1. не могу се правити објекти апстрактне класе зато што она не може имати деструктор
  2. наткласа апстрактне класе је обавезно апстрактна класа
  3. класа изведена из апстрактне класе мора да редефинише све наслеђене апстрактне методе
  4. не могу се стварати објекти апстрактне класе већ само показивачи и рефенце на њу, који могу показивати (упућивати) на објекте конкретних изведених класа које нису апстрактне

5. задатак

Шта исписује следећи код:

#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;
}

Одговор: 1001

6. задатак

Шта исписује дати програм:

#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;
}

Одговор: 4

7. задатак

Шта исписује следећи код:

#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. баца се изузетак бад_цаст
  2. д
  3. цд
  4. ц
  5. бцд

8. задатак

Шта исписује следећи код:

#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;
}

Одговор: 2

9. задатак

Заокружити исправне изразе, ако је дат следећи код:

template <typename T=int, int k=10>
class Niz { T niz[k]; };
  1. Низ<инт*, 20> н1;
  2. Низ<инт*&, 20> н2;
  3. Низ<20> н3;
  4. Низ<> н4;
  5. Низ<доубле, 5.5> н5;
  6. Низ н6;

Напомена: Одговор под ф) се преводи само од C++17 и новијих стандарда.

10. задатак

Шта исписује следећи код:

#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;
}

Одговор: 528

11. задатак

Шта исписује следећи програм:

#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;
}

Одговор: Не преводи се, D је апстрактна класа

12. задатак

Шта важи за основну и изведену класу, ако обе имају празна тела, а извођење је јавно:

  1. Изведена класа наслеђује конструктор
  2. Изведена класа не наслеђује деструктор
  3. Изведена класа има подразумевани конструктор са празним телом
  4. Изведена класа има деструктор који има празно тело
  5. Изведена класа има аутоматски генерисан копирајући конструктор

13. задатак

Шта исписује следећи програм:

#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;
}

Одговор: 3

14. задатак

Колико ће се звездица исписати?

#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;
}

Одговор: 4

15. задатак

Шта исписује следећи програм:

#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;
}

Одговор: 4003

16. задатак

Заокружи тачна тврђења:

  1. Генеричке функције убрзавају извршавање програма
  2. Генеричке функције убрзавају превођење
  3. Генеричке функције и класе омогућавају бољу реупотребу кода
  4. Генерички механизам омогућава генерисање функција са различитим типовима параметара у току извршавања програма

17. задатак

Заокружи тачна тврђења:

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;
    }
}

За класу Т мора да постоји:

  1. Подразумевани конструктор
  2. Оператор доделе вредности
  3. Оператор []
  4. Копирајући конструктор
  5. Метода која врши полиморфну копију

18. задатак

Ако је еxцептион класа изузетака и из ње је изведена класа I, а из класе I даље изведена класа II, којим редоследом треба навести руковаоце изузецима (заокружити једно или више):

  1. еxцептион, I , II , ...
  2. II, I, еxцептион, ...
  3. I, II , еxцептион, ...
  4. II, I, ..., еxцептион
  5. ..., еxцептион, I, II

19. задатак

Шта исписује следећи програм:

#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. Специјализација 1
  2. Специјализација 2
  3. Грешка јер се приступа приватном пољу
  4. Грешка због двозначности шаблона

20. задатак

Шта исписује следећи програм:

#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;
}

Одговор: 222

21. задатак

Шта исписује следећи програм:

#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;
}

Одговор: 10 0.5 6.5

22. задатак

Шта исписује следећи програм:

#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;
}

Одговор: 4

23. задатак

Шта је проблем код дефиниције функције:

class X {
public:
    X operator+(const X& x) const;
};
  1. Исправна је
  2. Није исправна јер за бинарни оператор + фали још један аргумент
  3. Није исправна јер нису обезбеђене бочне вредности
  4. Није исправна јер ова функција МОРА да враћа референцу на лвредност

24. задатак

Шта од следећег важи за деструкторе:

  1. Деструктор нема аргументе
  2. Деструктор може имати један аргумент ако има подразумевану вредност
  3. Деструктор враћа воид
  4. Деструктор се може експлицитно позвати

25. задатак

Шта исписује следећи програм:

#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;
}

Одговор: 76

26. задатак

Шта исписује следећи код:

#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;
}

Одговор: 2143

27. задатак

Шта је проблем код дефинисања оператора +?

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

Одговор: Промена н-арности оператора.

28. задатак

int a = 5;
int& b = a;
int* c = &a;
  1. ниједна
  2. c--
  3. a--
  4. (*c)--
  5. c = a-1

29. задатак

Како се правило дефинише низ од n целих бројева, ако n задаје корисник током извршавања?

Одговор: int *niz = new int[n];

30. задатак

Шта исписује следећи код:

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;
}

Одговор: 43

31. задатак

Шта исписује следећи код:

#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;
}

Одговор: АБАЦ

32. задатак

Да ли су следећи механизми статички или динамички?

  • Генерици - статички
  • Преклапање оператора - статички
  • Полиморфизам - динамички
  • Преклапање имена функција - статички
  • Обрада изузетака - динамички

33. задатак

Које особине су заједничке за операторе () и ->:

  1. преклапају се као бинарни
  2. могу се преклопити као глобална пријатељска функција
  3. тип резултата мора бити једнак типу операнда
  4. преклапањем није могуће променити приоритет оператора
  5. резултат мора бити показивачког типа

34. задатак

Зашто у C++ дефиниција променљиве може стајати било где у блоку а не само на почетку блока?

Одговор: Зато што је наредба

35. задатак

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

Ког је типа this у методу m?

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

36. задатак

Шта исписује следећи код:

#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;
}

Одговор: 3

37. задатак

Коју вредност ће имати 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;
}

Одговор: 5

38. задатак

Које тврдње за статички каст су тачне?

  1. Користи се за уклањање/додавање модификатора const неком типу
  2. Користи се за конверзије између нумеричких типова
  3. Користи се за корисничке конверзије
  4. Користи се за конверзије типова података који нису у логичкој вези
  5. Користи се за конверзије између показивачких типова
  6. Користи се за преносиве конверзије
  7. Користи се за непреносиве конверзије

39. задатак

Конструктор неке класе се извршава:

  1. Када се извршава дефиниција статичког објекта неке класе
  2. Када се врши додела вредности објекту дате класе
  3. Када се конструктор експлицитно позове и створи се привремени објекат дате класе
  4. Када се ствара динамички објекат дате класе
  5. Када се врши пренос аргумента у параметар дате класе по вредности
  6. Када се из функције враћа резултат типа дате класе по вредности

39. задатак

Које тврдње су исправне:

  1. Досег глобалне променљиве је од дефиниције до краја фајла у којем је дефинисана
  2. Досег класног атрибута је од места где је наведен до краја дефиниције класе
  3. Досег променљиве дефинисане у дефиниције фор петље, према стандарду, је до краја окружујућег блока фор петље
  4. Досег локалне променљиве је од почетка до краја блока у којем је дефинисана
  5. Досег лабеле је од места где је дефинисана до краја тела функције

40. задатак

Упућивач (референца) на двредност је двредност:

  1. Тачно
  2. Нетачно

41. задатак

Које тврдње су исправне:

  1. Објекат класе мора испољавати полиморфно понашање
  2. Објекат класе је опис корисничког структуираног типа
  3. Објекат класе је нешто (у меморији) што има стање, понашање и идентитет
  4. Објекат класе је опис понашање сродних примерака неке апстракције
  5. Објекат у ширем смислу је податак одређеног типа који у време извршавања програма има одређено место у меморији