ОО1/Фебруар 2021

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу
  • За питања са више одговора, тачни одговори су подебљани и уоквирени
  • За питања за које се одговори уносе, тачни одговори су подвучени и сакривени, тако да се прикажу када изаберете тај текст (пример: овако)
  • Притисните лево дугме испод за сакривање и откривање свих одговора, или десно дугме за укључивање и искључивање интерактивног режима:

1. zadatak

Koja od navedenih definicija najbolje odgovara apstrakciji kao elementnu objektno orijentisanog stila programiranja?

  1. Odvajanje interfejsa klase od njene implementacije koja se sakriva od korisnika.
  2. Prepoznavanje bitnih svojstava skupova sličnih objekata i opisivanje zajedničkom klasom.
  3. Mogućnost kreiranja apstraktnih klasa i funkcija članica.
  4. Pristupačnost određenim članovima klase navođenjem prava pristupa.

2. zadatak

Koji je tip promenljive i u sledećem isečku koda napisanom na jeziku C++?

const int j = 1;
const auto k = j;
auto i = new int + k;
  1. const int*
  2. int*
  3. int
  4. const int* const
  5. const int
  6. int *const

Objašnjenje: Tip promenljive k će biti const int, jer joj se samo dodeljuje j, ali će tip i biti int* jer operator new vraća pokazivač koji nije konstantan i na njega se samo dodaje pomeraj k.

3. zadatak

U klasi X je definisan metod m.

class X {
public:
	void m(X *x) const {}
};

Kog tipa je pokazivač this u metodu m?

  1. const X * const
  2. X*
  3. X * const
  4. X
  5. const X *

Objašnjenje: Pokazivač this ne može da se menja, pa je podrazumevano tipa X* const. Kada se doda const modifikator na metodu m, to znači da polja objekta ne mogu da se menjaju unutar metode i zato taj pokazivač postaje const X* const.

4. zadatak

Koji od sledećih tvrđenja su tačni za statičke metode klase X:

  1. Nemaju pokazivač this
  2. Imaju pravo pristupa svim članovima X
  3. Imaju javno pravo pristupa nezavisno od sekcije u kojoj se nalaze
  4. Mogu da pristupaju statičkim atributima i funkcijama prostim imenovanjem
  5. Moraju se definisati van tela klase

5. zadatak

Šta ispisuje sledeći program na programskom jeziku C++? (Ukoliko smatrate da se program ne prevodi, unesite NP. Ukoliko smatrate da dolazi do greške pri izvršavanju, unesite X)

#include <iostream>
using namespace std;

int main() {
	int brojevi[] = {1, 2, 3};
	int* pk = brojevi;
	pk++;
	int& ref = *pk;
	ref++;
	cout << brojevi[0] << brojevi[1] << brojevi[2];
    return 0;
}

Rešenje: 133

Objašnjenje: Pokazivač pk će na početku pokazivati na početak niza brojevi, zatim biti uvećan za 1 pa će pokazivati na drugi element niza. Referenca ref od stvaranja pokazuje na isti element kao pk, ali se primenom operatora ++ nad referencom ne menja njena lokacija (jer se ona ne može promeniti) nego vrednost člana niza na koji pokazuje, pa će u nizu biti brojevi 1, 3 i 3 koji se ispod i ispisuju.

6. zadatak

Kog tipa je parametar premeštajućeg operatora dodele za klasu X?

Rešenje: X&&

7. zadatak

Koji od ponuđenih prefiksa opšte (nespecijalizovane) šablonske (genreičke[sic]) funkcije ili klase su ispravni?

  1. template<typename T>
  2. template<typename T, int N>
  3. template<int N>
  4. template<typename T, typename U>
  5. template<>

Objašnjenje: template<> se može koristiti samo za specijalizacije šablona.

8. zadatak

Na koje sve načine je moguće definisati klasu B izvedenu iz klase A?

  1. class B : virtual A {...};
  2. class B : protected public A {...};
  3. class B : override A {...};
  4. class B : A {...};
  5. class B : public A {...};

9. zadatak

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

#include <iostream>
using namespace std;

class A {
private:
    int a;
public:
    A(int aa=0) : a(aa) {}
    void m() { cout << 1; }
    friend ostream& operator<<(ostream& os,const A& a) { return os << a.a; } 
};

class B: public A{
private:
    int a;
public:
    B(int aa) : a(aa) {}
    int m() { cout << 2; return 2; }
};

int main() {
    A a(5);
    B b(7);
    A* ap = &b;
    a.m();
    b.m();
    ap->m();
    cout << a << b;
}

Rešenje: 12150

Objašnjenje: Prve dve metode će biti pozvane regularno nad klasama A i B. Poziv nevirtuelne metode nad pokazivačem na klasu A, iako zapravo pokazuje na izvedenu klasu B, će pozvati metodu klase A. Na kraju se poziva operator<< iz osnovne klase, koji preko reference na klasu A ispisuje vrednosti polja a osnovnih klasa (za objekat klase A ispisuje njegovo polje a, dok za objekat klase B ispisuje polje a njegovog podobjekta klase A) jer, iako se pristupa preko reference, pristup poljima nikada ne koristi virtuelni mehanizam.

10. zadatak

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

#include <iostream>
using namespace std;

class IzuzO {};
class IzuzI : public IzuzO {};

int main() {
	try
	{
		try
		{
			throw new IzuzI();
		}
		catch (IzuzI&) { cout << 1; }
		catch (IzuzO&) { cout << 2; }
		catch (...) { cout << 3; throw; }
	}
	catch (IzuzO*) { cout << 4; }
	catch (IzuzI*) { cout << 5; }
	catch (...) { cout << 6; }
	return 0;
}

Rešenje: 34

Objašnjenje: Hvatanje po referenci neće uhvatiti izuzetak tipa pokazivača na klasu IzuzI, pa se poziva opšti rukovaoc greškama koji ispisuje 3 i ponovo baca grešku. Nakon toga, prvi sledeći rukovaoc će uhvatiti grešku jer je greška pokazivačkog tipa na tip koji može standardno da se konvertuje u pokazivački tip rukovaoca i ispisaće 4.