OO1/K1 2023
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.
- 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
- Apstrakcija Prepoznavanje bitnih svojstava skupova sličnih objekata uz zanemarivanje nebitnih detalja i predstavljanje zajedničkom klasom
- Kapsulacija Sakrivanje implementacije (reprezentacije stanja i realizacije ponašanja) uz objavljivanje interfejsa kroz spolja dostupne deklaracije metoda
- 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?
- Globalno ime ne može da se definište unutar funckije, ali može unutar klase
- U jednoj datoteci s izvornim kodom može da postoji globalna promenljiva koja ima isto ime kao lokalna promenljiva
- Lokalno ime ima doseg od mesta deklaracije ili definicije do kraja bloka u kome je data deklaracija ili definicija
- 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)
- 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
- Ukoliko primenom operatora new dodela memorije ne uspe, greška se podrazumevano prijavljuje izuzetkom bad_alloc
- Operator delete menja vrednost pokazivača operanda
- Primena operatora delete ne vraća nikakav rezultat (tip rezultata je void)
- tip rezultata operatora new je void *
- 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;
}
- void f(int i) {}
- void f(int &&i) {}
- void f(const int &&i) {}
- void f(const int &i) {}
- 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
void m(const Klasa*) const;
void m(const Klasa*);
void m(Klasa*) const;
void m(Klasa*);
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:
- 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
- Funkcija može da bude prijateljska samo jednoj klasi
- Prijateljska funckija mora da bude definisana u telu klase kojoj je prijatelj
- Prijateljska funkcija može da pristupa privatnim metodima klase kojoj je prijatelj
- 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:
***
};
}
- L(int &x) {x = 1;};
- int l() {return g();}
- int h() {return x;}
- int j() {return s;}
- int k() {return ::x;}