ОО1/К1 2023 — разлика између измена
м (Ispravka kategorije) |
м (→10. zadatak) |
||
(6 међуизмена истог корисника није приказано) | |||
Ред 9: | Ред 9: | ||
Povezati osnovne koncepte objektno orijentisanog programiranja s jednim od ponuđenih opisa koji najbolje odgovara konceptu | 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. | Ovako izgledaju zadaci sa odgovorima ponuđenim u padajućem meniju. | ||
<div class="abc-list" data-solution="select" data-options="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, Prepoznavanje bitnih svojstava skupova sličnih objekata uz zanemarivanje nebitnih detalja i predstavljanje zajedničkom klasom, Sakrivanje implementacije (reprezentacije stanja i realizacije ponašanja) uz objavljivanje interfejsa kroz spolja dostupne deklaracije metoda, Uvođenje novog tipa podataka (klase) na osnovu postojećeg sa znaćenjem da su primerci novog tipa specijalna vrsta primeraka postojećeg tipa"> | <div class="abc-list" data-solution="select" data-options=",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, Prepoznavanje bitnih svojstava skupova sličnih objekata uz zanemarivanje nebitnih detalja i predstavljanje zajedničkom klasom, Sakrivanje implementacije (reprezentacije stanja i realizacije ponašanja) uz objavljivanje interfejsa kroz spolja dostupne deklaracije metoda, Uvođenje novog tipa podataka (klase) na osnovu postojećeg sa znaćenjem da su primerci novog tipa specijalna vrsta primeraka postojećeg tipa"> | ||
# Polimorfirzam <span class="spoiler">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</span> | # Polimorfirzam <span class="spoiler">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</span> | ||
# Apstrakcija <span class="spoiler">Prepoznavanje bitnih svojstava skupova sličnih objekata uz zanemarivanje nebitnih detalja i predstavljanje zajedničkom klasom</span> | # Apstrakcija <span class="spoiler">Prepoznavanje bitnih svojstava skupova sličnih objekata uz zanemarivanje nebitnih detalja i predstavljanje zajedničkom klasom</span> | ||
Ред 72: | Ред 72: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<div class="abc-list" data-solution="multiple"> | <div class="abc-list" data-solution="multiple"> | ||
# < | # <syntaxhighlight inline lang ="cpp" class="solution">void f(int i) {}</syntaxhighlight> | ||
# void f(int &&i) {} | # <syntaxhighlight inline lang ="cpp">void f(int &&i) {}</syntaxhighlight> | ||
# void f(const int &&i) {} | # <syntaxhighlight inline lang ="cpp">void f(const int &&i) {}</syntaxhighlight> | ||
# < | # <syntaxhighlight inline lang ="cpp" class="solution">void f(const int &i) {}</syntaxhighlight> | ||
# void f(int &i) {} | # <syntaxhighlight inline lang ="cpp">void f(int &i) {}</syntaxhighlight> | ||
</div> | </div> | ||
Ред 103: | Ред 103: | ||
Za navedene metode klase '''Klasa''' navesti one u kojima je pokazivač '''this''' tipa '''const Klasa * const''' | Za navedene metode klase '''Klasa''' navesti one u kojima je pokazivač '''this''' tipa '''const Klasa * const''' | ||
<div class="abc-list" data-solution="multiple"> | <div class="abc-list" data-solution="multiple"> | ||
# < | # <syntaxhighlight inline lang = "cpp" class="solution">void m(const Klasa*) const;</syntaxhighlight> | ||
# <syntaxhighlight lang="cpp">void m(const Klasa*);</syntaxhighlight> | # <syntaxhighlight inline lang = "cpp">void m(const Klasa*);</syntaxhighlight> | ||
# < | # <syntaxhighlight inline lang = "cpp" class="solution">void m(Klasa*) const;</syntaxhighlight> | ||
# <syntaxhighlight lang="cpp">void m(Klasa*);</syntaxhighlight> | # <syntaxhighlight inline lang = "cpp">void m(Klasa*);</syntaxhighlight> | ||
# < | # <syntaxhighlight inline lang = "cpp" class="solution">void m() const;</syntaxhighlight> | ||
</div> | </div> | ||
Objašnjenje: <span class="spoiler" data-solution="explanation">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''</span> | Objašnjenje: <span class="spoiler" data-solution="explanation">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''</span> | ||
Ред 162: | Ред 162: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<div class="abc-list" data-solution="multiple"> | <div class="abc-list" data-solution="multiple"> | ||
# < | # <syntaxhighlight inline lang = "cpp" class="solution">L(int &x) {x = 1;};</syntaxhighlight> | ||
# < | # <syntaxhighlight inline lang = "cpp" class="solution">int l() {return g();}</syntaxhighlight> | ||
# int h() {return x;} | # <syntaxhighlight inline lang = "cpp">int h() {return x;}</syntaxhighlight> | ||
# < | # <syntaxhighlight inline lang = "cpp" class="solution">int j() {return s;}</syntaxhighlight> | ||
# < | # <syntaxhighlight inline lang = "cpp" class="solution">int k() {return ::x;}</syntaxhighlight> | ||
</div> | </div> | ||
Тренутна верзија на датум 28. април 2024. у 20:33
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;}