OO1/K1 2023

Izvor: SI Wiki
< ОО1
Datum izmene: 15. mart 2024. u 02:23; autor: KockaAdmiralac (razgovor | doprinosi) (Ispravka kategorije)
Pređi na navigaciju Pređi na pretragu

Prvi kolokvijum, skolska 2023/2024 godina. Održan je 02.11.2023. i trajao je 20 minuta.

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


1. zadatak

Povezati osnovne koncepte objektno orijentisanog programiranja s jednim od ponuđenih opisa koji najbolje odgovara konceptu Ovako izgledaju zadaci sa odgovorima ponuđenim u padajućem meniju.

  1. Polimorfirzam Ponašanje objekta ne zavisi samo od tipa pokazivača (upućivača) koji pokazuje na objekat već od tipa pokazivanog (upućivanog) objekta koji je poznat u vreme izvršenja
  2. Apstrakcija Prepoznavanje bitnih svojstava skupova sličnih objekata uz zanemarivanje nebitnih detalja i predstavljanje zajedničkom klasom
  3. Kapsulacija Sakrivanje implementacije (reprezentacije stanja i realizacije ponašanja) uz objavljivanje interfejsa kroz spolja dostupne deklaracije metoda
  4. Nasleđivanje Uvođenje novog tipa podataka (klase) na osnovu postojećeg sa znaćenjem da su primerci novog tipa specijalna vrsta primeraka postojećeg tipa

2. zadatak

Koje tvrdnje vezane za programski jezik C++ su tačne?

  1. Globalno ime ne može da se definište unutar funckije, ali može unutar klase
  2. U jednoj datoteci s izvornim kodom može da postoji globalna promenljiva koja ima isto ime kao lokalna promenljiva
  3. Lokalno ime ima doseg od mesta deklaracije ili definicije do kraja bloka u kome je data deklaracija ili definicija
  4. Unutar tela funkcije f1 može da se pristupi lokalnoj promenljivoj a koja je definisana u telu druge funkcije f2 korišćenjem unarnog operatora :: ispred imena te lokalne promenljive (::a)
  5. Unutar tela funkcije postoji način da se pristupi globalnoj promenljivoj iako je u telu funckije deklarisana lokalna promenljiva s istim imenom

3. zadatak

Koje od sledećih tvrdnji su tačne za programski jezik C++?

Izaberite jedan ili više odgovora

  1. Ukoliko primenom operatora new dodela memorije ne uspe, greška se podrazumevano prijavljuje izuzetkom bad_alloc
  2. Operator delete menja vrednost pokazivača operanda
  3. Primena operatora delete ne vraća nikakav rezultat (tip rezultata je void)
  4. tip rezultata operatora new je void *
  5. primena operatora delete nad operandom tipa pokazivača koji ima vrednost nullptr ima nedefinisano ponašanje

4. zadatak

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

Napomena: Ukoliko smatrate da se program ne prevodi, upisati NP. Ukoliko smatrate da se dešava greška u izvršavanju upisati G.

#include <iostream>
using namespace std;

int main() {
    int a = 5;
    int b = 2;
    int &c = a;
    c++;
    c = b;
    c++
   
    cout << a << b << c;
    return 0;
}

Odgovor: 323 Objašnjenje: Naredbom int &c = a smo referencu c trajno vezali za promenljivu a. Svaka operacija nad c će od tog trenutka biti operacija nad a, i obrnuto. Zato c = b ne menja na šta upućuje c nego vrednost b dodeljuje c (samim tim i a)

5. zadatak

Kako može biti definisana funkcija f da bi se dati programski kod na jeziku C++ uspešno prevodio?

int main() {
    int i = 3;
    const int &ri = i;
    f(ri);
    return 0;
}
  1. void f(int i) {}
  2. void f(int &&i) {}
  3. void f(const int &&i) {}
  4. void f(const int &i) {}
  5. void f(int &i) {}

6. zadatak

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

#include <iostream>

class X {
public:
    int m() {
        static int i = 0;
        return ++i;
    }
};

int main() {
    X x1, x2;
    std::cout << x1.m() << x1.m() << x2.m() << std::endl;
}

Odgovor: 123 Objašnjenje: Ne postoji posebne "verzije" metoda za svaki objekat, već je metod jedna jedinstvena funkcija za čitavu klasu. Zato je statička promenljiva i jedinstvena za sve pozive metoda m()

7. zadatak

Za navedene metode klase Klasa navesti one u kojima je pokazivač this tipa const Klasa * const

  1. void m(const Klasa*) const;
    
  2. void m(const Klasa*);
    
  3. void m(Klasa*) const;
    
  4. void m(Klasa*);
    
  5. void m() const;
    

Objašnjenje: Pokazivač this je uvek tipa Klasa * const jer se ne može menjati adresa na koju pokazuje. Ukoliko je metod obeležen kvalifikatorom const, to znači da se u tom metodu objekat pozivalac ne menja što this čini const Klasa * const. Svi argumenti metoda su nebitni za this

8. zadatak

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

Napomena: Ukoliko smatrate da se program ne prevodi, upisati NP. Ukoliko smatrate da se dešava greška u izvršavanju upisati G.

#include <iostream>

class A {
    int a;
public:
    A(int b = 2) : a(b) {std::cout << a;}
};

int main() {
    A niz[3];
    niz[1] = A(5);
    return 0;
}

Odgovor: 2225 Objašnjenje: Prilikom inicijalizaije niza implicitno se poziva no-arg konstruktor koji inicijalizuje A::a na 2 i ispisuje ga. A(5) zatim poziva konverzioni konstrkutor koji A::a dodeljuje vrednost 5 i ispisuje je.

9. zadatak

Koje od tvrdnje su tačne za jezik C++?

Izaberite jedan ili više odgovora:

  1. Da bi prijateljska globalna funkcija pristupala privatnim članovima klase kojoj je prijatelj, njena deklaracija ili definicija mora da bude navedena u privatnoj sekciji te klase
  2. Funkcija može da bude prijateljska samo jednoj klasi
  3. Prijateljska funckija mora da bude definisana u telu klase kojoj je prijatelj
  4. Prijateljska funkcija može da pristupa privatnim metodima klase kojoj je prijatelj
  5. Globalna prijateljska funkcija ne može da koristi pokazivač this na objekat klase kojoj je prijatelj

10. zadatak

Koja od definicija funkcija može da se pojavi na mestu *** u sledećem segmentu koda na jeziku C++ (predpostaviti da je funkcija g() ispravno definisana u drugoj datoteci)

int x;

void f() {
    static int s;
    int x;
    extern int g();
    class L {
    public:
        ***
    };
}
  1. L(int &x) {x = 1;};
  2. int l() {return g();}
  3. int h() {return x;}
  4. int j() {return s;}
  5. int k() {return ::x;}

Napomene