ОО1/Питања — разлика између измена
< ОО1
Пређи на навигацију
Пређи на претрагу
Ред 18: | Ред 18: | ||
== Proširenja C == | == Proširenja C == | ||
# Šta je deklaracija, a šta definicija? | # Šta je deklaracija, a šta definicija? - '''Deklaracija je iskaz koji samo uvodi neko ime (identifikator) u program i govori prevodiocu kojoj jezičkoj kategoriji pripada. Definicija je ona deklaracija koja: stvara objekat, navodi telo funkcije ili u potpunosti navodi strukturu korisničkog tipa.''' | ||
# Koliko puta se smeju ponoviti deklaracije i definicije jednog istog objekta/funkcije/tipa? | # Koliko puta se smeju ponoviti deklaracije i definicije jednog istog objekta/funkcije/tipa? - '''U programu može da postoji samo jedna definicija (jednog objekta, funkcije, tipa) i proizvoljno mnogo deklaracija.''' | ||
# Kakva može promenljiva da bude | # Kakva može promenljiva da bude? - '''Prema dosegu: globalna ili lokalna. Prema veku trajanja: statička, automatska, dinamička, privremena (tranzijentna).''' | ||
# Šta je l-vrednost, a šta d-vrednost? | # Šta je l-vrednost, a šta d-vrednost? - '''L-vrednost (lvalue) je izraz koji upućuje na objekat (u širem smislu) ili funkciju. D-vrednost (rvalue) je izraz koji nije lvrednost.''' | ||
# Da li uvek sa leve strane znaka | # Da li uvek sa leve strane znaka = može da stoji l-vrednost? - '''Ne, mogu samo da stoje promenljive l-vrednosti, tj. svaka l-vrednost koja nije ime funkcije, ime niza, ili konstantan objekat.''' | ||
# Koji operatori zahtevaju da im operandi budu l-vrednosti? | # Koji operatori zahtevaju da im operandi budu l-vrednosti? - '''&, postfiksni: ++, - -, levi operandi dodele vrednosti''' | ||
# Koji operatori bi trebalo da vrate l-vrednost? | # Koji operatori bi trebalo da vrate l-vrednost? - '''unarni *, [ ], prefiksni ++, - -, operatori dodele vrednosti''' | ||
# Koju oblast važenja imaju i koliko traju: lokalna imena, globalna imena, statički objekti, dinamički objekti, automatski objekti, privremeni objekti? | # Koju oblast važenja imaju i koliko traju: lokalna imena, globalna imena, statički objekti, dinamički objekti, automatski objekti, privremeni objekti? - '''Automatski objekti: od definicije do napustanja oblasti vazenja, staticki objekat: od definicije do kraja izvrsavanja main-a, dinamicki objekat: zivotni vek kontrolise programer (stvaraju se pomocu new, brisu se pomocu delete). Privremeni objekat ima kratak i nedefinisan zivotni vek.''' | ||
# Da li je moguće na neki način pristupiti globalnom imenu ukoliko je ono sakriveno od strane lokalnog imena, a lokalnom imenu u spoljašnjem bloku ukoliko je ono sakriveno od strane lokalnog imena u unutrašnjem bloku? | # Da li je moguće na neki način pristupiti globalnom imenu ukoliko je ono sakriveno od strane lokalnog imena, a lokalnom imenu u spoljašnjem bloku ukoliko je ono sakriveno od strane lokalnog imena u unutrašnjem bloku? - '''Globalnom imenu moguce je pristupiti pomocu ‘::’, a lokalnom imenu nije moguce pristupiti.''' (proveriti!!!) | ||
# Da li se u uslovu | # Da li se u uslovu if može definisati neka promenljiva i ako da kakva mora da bude i koliko ona traje? - '''Moze da se definise promenljiva, i njen vek trajanja je od definicije do kraja then, tj. else naredbe.''' | ||
# Da li je unutar funkcije moguće imati promenljivu istog imena kao neki od parametara i ako ne koji je razlog? | # Da li je unutar funkcije moguće imati promenljivu istog imena kao neki od parametara i ako ne koji je razlog? - '''Da, unutar funkcije je moguće imati promenljivu istog imena kao neki od parametara.''' | ||
# Koju oblast važenja imaju članovi strukture/klase? | # Koju oblast važenja imaju članovi strukture/klase? '''Imaju oblast važenja te iste klase.''' | ||
# Na koje sve načine se može pristupiti imenima članovima klase, van te klase? | # Na koje sve načine se može pristupiti imenima članovima klase, van te klase? - '''Preko operatora: . (levi operand objekat), -> (levi operand pokazivač na objekat), :: (levi operand ime klase).''' | ||
# Koju oblast važenja imaju labele? | # Koju oblast važenja imaju labele? - '''Imaju oblast važenja funkcije u kojoj se navode.''' | ||
# Da li je moguće sa | # Da li je moguće sa goto naredbom preskočiti definiciju neke promenljive i skočiti na labelu koja se nalazi nakon nje? - '''Ne, nije moguće koristiti goto naredbu da preskočite definiciju promenljive u C++. goto naredba se može koristiti za skakanje na određenu oznaku (labelu) unutar iste funkcije ili bloka koda, ali ne može preskočiti definiciju promenljive. Definicija promenljive mora biti uključena u tok izvršavanja programa.''' | ||
# Kada se kreiraju statički objekti? | # Kada se kreiraju statički objekti? - '''Globalni staticki objekti, stvaraju se jednom, na pocetku izvrsavanja programa. Lokalni staticki objekti stvaraju se pri prvom nailasku toka programa na njihovu definiciju.''' | ||
# Da li je C++ strogo ili labavo tipiziran jezik? | # Da li je C++ strogo ili labavo tipiziran jezik? - '''C++ je hibridan jezik, pri manipulisanju prostim tipovima je labavo tipizaran, dok sa slozenim korisnickim tipovima je strogo tipiziran.''' | ||
# Koja je razlika između 4 kast operatora i kad se koji koristi? | # Koja je razlika između 4 kast operatora i kad se koji koristi? - '''Staticki kast koristi se za prenosive konverzije (izmedju numerickih tipova, kastova koje definise programer i nekih pokazivaca u void*), implicitno se vrsi kad je bezbedno. Reinterpretirajuci kast namenjen je za konverzije logicki neslicnih tipova (int i pokazivac, npr). Konstanta konverzija koristi se za dodavanje ili uklanjanje const. Dodavanje je sigurno, uklanjanje nije. Dinamicki kast jos postoji.''' | ||
# Na koja dva načina možemo implementirati kastovanje (navesti mane ukoliko ih ima neki način)? | # Na koja dva načina možemo implementirati kastovanje (navesti mane ukoliko ih ima neki način)? - '''Static_cast i Dynamic_cast. Mana dynamic_cast-a je da se koristi u kontekstu polimorfizma i zahteva da klase imaju bar jedan virtualni metod. Takođe, dynamic_cast je sporiji od static_cast-a, jer uključuje provere u vreme izvršavanja (runtime checks) i može vratiti nullptr kada konverzija nije moguća.''' | ||
# Šta radi operator | # Šta radi operator decltype, da li računa izraz? - '''Decltype dodeljuje onaj tip podataka promenljivoj koji se se nalazi u zagradi decltype(izraz), ali taj izraz se nikad ne izracunava.''' | ||
# Koja je bitna razlika između | # Koja je bitna razlika između decltype i auto? - '''auto dodeljuje tip na osnovu izraza inicijalizatora (onoga sto se nalazi sa desne strane operatora dodele vrednosti), a decltype odredjuje na osnovu izraza u zagradi: decltype(izraz).''' | ||
# Da li se | # Da li se auto može koristiti sa povratnom vrednosti funkcije i u kojim slučajevima? - '''Moze, bitno je da se funkcija koja vraca odredjeni tip pomocu return, bude pre toga definisana, a ne samo deklarisana.''' | ||
# Kog je tipa string literal u C++ ("abcd")? | # Kog je tipa string literal u C++ ("abcd")? - '''Tipa string.''' | ||
# Kakvu razliku pravi pozicija gde se nalazi reč | # Kakvu razliku pravi pozicija gde se nalazi reč const u definiciji pokazivača? - '''Kad se const nadje ispred parametra koji je pokazivac, obezbedjuje se da funkcija ne menja objekat, a ispred tipa rezultata funkcije, obezbedjuje se nepromenljivost privremenog objekta rezultata.''' | ||
# Na koje načine je moguće pristupiti imenu iz nekog prostora imena? | # Na koje načine je moguće pristupiti imenu iz nekog prostora imena? - '''Razresenjem doksega: A::x; uvozom datog imena: using A::x; uvozom svih imena iz prostora imena: using namespace A.''' | ||
# Da li je validno imati objekat istog imena kao i neki tip? | # Da li je validno imati objekat istog imena kao i neki tip? - '''U jeziku C++, tehnički je dozvoljeno kreirati objekat sa imenom koje je isto kao ime nekog tipa.''' | ||
# Da li je moguće imati isto ime (identifikator) za dve različite stvari u jednom prostoru imena, tj. da ime nije jednoznačno? | # Da li je moguće imati isto ime (identifikator) za dve različite stvari u jednom prostoru imena, tj. da ime nije jednoznačno? - '''Nije moguce, mora da bude jednoznacno.''' | ||
# Koji operatori su definisani za tipove nabrajanja ( | # Koji operatori su definisani za tipove nabrajanja (enum)? - '''Definisan je samo operator dodele vrednosti.''' | ||
# Koje konverzije postoje za tipove nabrajanja? | # Koje konverzije postoje za tipove nabrajanja? - '''Implicitna konverzija u osnovne tipove kao što su int, char, bool itd. Vrednost iz tipa nabrajanja može se eksplicitno konvertovati u druge tipove ili obrnuto koristeći statički kast (static_cast).''' | ||
# Da li je moguće definisati koji tip koristi "under-the-hood" tip nabrajanja, da se ne koristi uvek | # Da li je moguće definisati koji tip koristi "under-the-hood" tip nabrajanja, da se ne koristi uvek int, i kako? - '''Moguce je, pomocu eksplicitnog navodjenja tipa koji se koristi za tipa nabrajanja (static_cast).''' | ||
# Koja je razlika između običnog tipa nabrajanja i tipa nabrajanja sa ograničenim dosegom ( | # Koja je razlika između običnog tipa nabrajanja i tipa nabrajanja sa ograničenim dosegom (enum class)? - '''Imena iz običnih tipova nabrajanja dele globalni opseg imena. Enumeracije sa ograničenim dosegom uvode lokalni opseg imena, što znači da imena enumeracija ne ulaze u globalni opseg imena.''' | ||
# Kako se koristi incijalizatorska lista prilikom kreiranja unije? | # Kako se koristi incijalizatorska lista prilikom kreiranja unije? - '''Moze da se postavi samo prvo polje.''' | ||
# Šta se dešava ukoliko inicijalizatorska lista sadrži više vrednosti nego što ima podataka ta struktura? | # Šta se dešava ukoliko inicijalizatorska lista sadrži više vrednosti nego što ima podataka ta struktura? - '''Visak je greska.''' | ||
# Da li se inicijalizatorske liste mogu koristiti pri dodeli vrednosti? | # Da li se inicijalizatorske liste mogu koristiti pri dodeli vrednosti? - '''Mogu.''' | ||
# Kako se pristupa poljima bezimene unije/strukture? | # Kako se pristupa poljima bezimene unije/strukture? - '''Polja anonimnih unija i struktura se pristupaju direktno preko objekta koji ih sadrži.''' | ||
# Da li je unija/struktura bezimena ako nema ime a ipak kreiramo bar jedan objekat ili pokazivač tog tipa? | # Da li je unija/struktura bezimena ako nema ime a ipak kreiramo bar jedan objekat ili pokazivač tog tipa? - '''Nije.''' | ||
# Na koji način radi | # Na koji način radi mutable polje? - '''Takvo polje moze da se menja cak i za nepromenljiv objekat strukture.''' | ||
# Šta se dešava ukoliko operator | # Šta se dešava ukoliko operator new ne uspe da alocira memoriju jer nema dovoljno prostora? - '''Izbacuje se izuzetak bad_alloc.''' | ||
# Šta se dešava ukoliko pokušamo da obrišemo | # Šta se dešava ukoliko pokušamo da obrišemo nullptr sa delete operatorom? - '''Operator delete nema efekta.''' | ||
# Šta vraća operator | # Šta vraća operator delete? '''Ne vraca rezultat (tip je void).''' | ||
# Ukoliko dinamički alociramo matricu (više-dimenzioni niz, a ne niz nizova (<code>new Tacka[10][10]</code>)) da li dimenzije mogu biti promenljivi izrazi ili moraju biti konstante? | # Ukoliko dinamički alociramo matricu (više-dimenzioni niz, a ne niz nizova (<code>new Tacka[10][10]</code>)) da li dimenzije mogu biti promenljivi izrazi ili moraju biti konstante? - '''Sve dimenzije osim prve moraju da budu konstante, a taj promenljiv izraz mora da bude takav da moze da se izracuna u trenutku izvrsavanja naredbe sa operatorom new.''' | ||
# Da li je moguće napraviti niz referenci, pokazivač na referencu, referencu na pokazivač ili referencu na referencu? | # Da li je moguće napraviti niz referenci, pokazivač na referencu, referencu na pokazivač ili referencu na referencu? - '''Nije moguce napraviti niz referenci, referencu na referencu, pokazivac na referencu, ali je moguce napraviti referencu na pokazivac.''' | ||
# Da li "moderna" verzija for-petlje (<code>for(tip prom: niz) naredba</code>) u svakom ciklusu petlje sadrži referencu ili kopiju tekućeg elementa niza, tj. da li promena objekta | # Da li "moderna" verzija for-petlje (<code>for(tip prom: niz) naredba</code>) u svakom ciklusu petlje sadrži referencu ili kopiju tekućeg elementa niza, tj. da li promena objekta prom utiče na niz? - '''Sadrzi kopiju tekuceg elementa, a promena objekta prom ne utice na niz.''' | ||
# Da li je referenca na d-vrednost takođe d-vrednost ili je l-vrednost? | # Da li je referenca na d-vrednost takođe d-vrednost ili je l-vrednost? - '''Referenca na d-vrednost je l-vrednost. ''' | ||
# Da li referenca na d-vrednost može upućivati na konstantnu/nepromenljivu d-vrednost? | # Da li referenca na d-vrednost može upućivati na konstantnu/nepromenljivu d-vrednost? - '''Moze.''' | ||
# Da li parametri funkcije mogu biti tipa reference na d-vrednost? | # Da li parametri funkcije mogu biti tipa reference na d-vrednost? - '''Mogu.''' | ||
# Da li je dozvoljeno inicijalizovati referencu na d-vrednost pomoću l-vrednosti? | # Da li je dozvoljeno inicijalizovati referencu na d-vrednost pomoću l-vrednosti? - '''Nije.''' | ||
# Gde treba da se nalazi deklaracija funkcije koja se neposredno ugrađuje (<code>inline</code> funkcije)? | # Gde treba da se nalazi deklaracija funkcije koja se neposredno ugrađuje (<code>inline</code> funkcije)? - '''Deklaracija funkcije koja se neposredno ugrađuje (inline funkcija) obično se nalazi u zaglavlju.''' | ||
# Kada se računaju podrazumevane vrednosti argumenata? | # Kada se računaju podrazumevane vrednosti argumenata? - '''Ukoliko se pri pozivu funkcije ne navedu druge vrednosti argumenata.''' | ||
# Da li je mehanizam preklapanja imena funkcije statički ili dinamički? | # Da li je mehanizam preklapanja imena funkcije statički ili dinamički? - '''Staticki.''' | ||
# Da li je dovoljno da se samo tipovi rezultata razlikuju da bi postojale dve funkcije istog imena? | # Da li je dovoljno da se samo tipovi rezultata razlikuju da bi postojale dve funkcije istog imena? - '''Jeste.''' | ||
# Da li rezultat ternarnog operatora može biti l-vrednost? | # Da li rezultat ternarnog operatora može biti l-vrednost? - '''Moze.''' | ||
# Da li su reinterpretirajuća i konstantna konverzija bezbedne? | # Da li su reinterpretirajuća i konstantna konverzija bezbedne? - '''Reinterpretirajuca konverzija nije bezbedna. Konstantna jeste ukoliko se dodaje const, nije ako se uklanja.''' | ||
== Klase i objekti == | == Klase i objekti == |
Верзија на датум 24. новембар 2023. у 21:42
- Овај рок није решен. Помозите SI Wiki тако што ћете га решити.
Ispod su sakupljena razna pitanja sa prezentacija iz predmeta, zasad bez rešenja. Namenjena su za obnavljanje gradiva pred kolokvijum, kako bi studenti mogli da testiraju svoje znanje odgovaranjem na njih.
Uvod
- Prilikom izvođenja, da li se stari programski kod mora menjati, opet prevoditi i opet testirati? - Ne.
- Šta je apstrakcija? - Prepoznavanje bitnih svojstava skupova sličnih objekata i predstavljanje zajedničkom klasom.
- Koja su 3 značajna napretka u evoluciji programskih jezika? - Apstrakcija izraza (FORTRAN), apstrakcija kontrole (Algol60) i apstrakcija podataka (Pascal).
- Od koja dva dela se svaka klasa sastoji? - Ugovor (interfejs) i implementacija.
- Šta su objekti (i u užem i u širem smislu)? - Objekti su primerci odgovarajućih klasa.
- Da li je polimorfizam statički ili dinamički mehanizam? - Dinamički.
- Šta je polimorfizam? - 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.
- Šta su objektno-bazirani jezici, a šta objektno-orijentisani? - Objektno-zasnovani jezici podržavaju: apstrakciju, kapsulaciju i modularnost. Objektno-orijentisani jezici dodatno podržavaju princip nasleđivanja.
- Da li je mehanizam obrade izuzetaka svojstven samo za objektno-orijentisane jezike? - Ne.
- Da li je mehanizam preklapanja operatora svojstven samo za objektno-orijentisane jezike? - Ne.
- Da li se mogu preklopiti svi operatori? - Ne.
- Da li je generički mehanizam statički ili dinamički? - Statički.
Proširenja C
- Šta je deklaracija, a šta definicija? - Deklaracija je iskaz koji samo uvodi neko ime (identifikator) u program i govori prevodiocu kojoj jezičkoj kategoriji pripada. Definicija je ona deklaracija koja: stvara objekat, navodi telo funkcije ili u potpunosti navodi strukturu korisničkog tipa.
- Koliko puta se smeju ponoviti deklaracije i definicije jednog istog objekta/funkcije/tipa? - U programu može da postoji samo jedna definicija (jednog objekta, funkcije, tipa) i proizvoljno mnogo deklaracija.
- Kakva može promenljiva da bude? - Prema dosegu: globalna ili lokalna. Prema veku trajanja: statička, automatska, dinamička, privremena (tranzijentna).
- Šta je l-vrednost, a šta d-vrednost? - L-vrednost (lvalue) je izraz koji upućuje na objekat (u širem smislu) ili funkciju. D-vrednost (rvalue) je izraz koji nije lvrednost.
- Da li uvek sa leve strane znaka = može da stoji l-vrednost? - Ne, mogu samo da stoje promenljive l-vrednosti, tj. svaka l-vrednost koja nije ime funkcije, ime niza, ili konstantan objekat.
- Koji operatori zahtevaju da im operandi budu l-vrednosti? - &, postfiksni: ++, - -, levi operandi dodele vrednosti
- Koji operatori bi trebalo da vrate l-vrednost? - unarni *, [ ], prefiksni ++, - -, operatori dodele vrednosti
- Koju oblast važenja imaju i koliko traju: lokalna imena, globalna imena, statički objekti, dinamički objekti, automatski objekti, privremeni objekti? - Automatski objekti: od definicije do napustanja oblasti vazenja, staticki objekat: od definicije do kraja izvrsavanja main-a, dinamicki objekat: zivotni vek kontrolise programer (stvaraju se pomocu new, brisu se pomocu delete). Privremeni objekat ima kratak i nedefinisan zivotni vek.
- Da li je moguće na neki način pristupiti globalnom imenu ukoliko je ono sakriveno od strane lokalnog imena, a lokalnom imenu u spoljašnjem bloku ukoliko je ono sakriveno od strane lokalnog imena u unutrašnjem bloku? - Globalnom imenu moguce je pristupiti pomocu ‘::’, a lokalnom imenu nije moguce pristupiti. (proveriti!!!)
- Da li se u uslovu if može definisati neka promenljiva i ako da kakva mora da bude i koliko ona traje? - Moze da se definise promenljiva, i njen vek trajanja je od definicije do kraja then, tj. else naredbe.
- Da li je unutar funkcije moguće imati promenljivu istog imena kao neki od parametara i ako ne koji je razlog? - Da, unutar funkcije je moguće imati promenljivu istog imena kao neki od parametara.
- Koju oblast važenja imaju članovi strukture/klase? Imaju oblast važenja te iste klase.
- Na koje sve načine se može pristupiti imenima članovima klase, van te klase? - Preko operatora: . (levi operand objekat), -> (levi operand pokazivač na objekat), :: (levi operand ime klase).
- Koju oblast važenja imaju labele? - Imaju oblast važenja funkcije u kojoj se navode.
- Da li je moguće sa goto naredbom preskočiti definiciju neke promenljive i skočiti na labelu koja se nalazi nakon nje? - Ne, nije moguće koristiti goto naredbu da preskočite definiciju promenljive u C++. goto naredba se može koristiti za skakanje na određenu oznaku (labelu) unutar iste funkcije ili bloka koda, ali ne može preskočiti definiciju promenljive. Definicija promenljive mora biti uključena u tok izvršavanja programa.
- Kada se kreiraju statički objekti? - Globalni staticki objekti, stvaraju se jednom, na pocetku izvrsavanja programa. Lokalni staticki objekti stvaraju se pri prvom nailasku toka programa na njihovu definiciju.
- Da li je C++ strogo ili labavo tipiziran jezik? - C++ je hibridan jezik, pri manipulisanju prostim tipovima je labavo tipizaran, dok sa slozenim korisnickim tipovima je strogo tipiziran.
- Koja je razlika između 4 kast operatora i kad se koji koristi? - Staticki kast koristi se za prenosive konverzije (izmedju numerickih tipova, kastova koje definise programer i nekih pokazivaca u void*), implicitno se vrsi kad je bezbedno. Reinterpretirajuci kast namenjen je za konverzije logicki neslicnih tipova (int i pokazivac, npr). Konstanta konverzija koristi se za dodavanje ili uklanjanje const. Dodavanje je sigurno, uklanjanje nije. Dinamicki kast jos postoji.
- Na koja dva načina možemo implementirati kastovanje (navesti mane ukoliko ih ima neki način)? - Static_cast i Dynamic_cast. Mana dynamic_cast-a je da se koristi u kontekstu polimorfizma i zahteva da klase imaju bar jedan virtualni metod. Takođe, dynamic_cast je sporiji od static_cast-a, jer uključuje provere u vreme izvršavanja (runtime checks) i može vratiti nullptr kada konverzija nije moguća.
- Šta radi operator decltype, da li računa izraz? - Decltype dodeljuje onaj tip podataka promenljivoj koji se se nalazi u zagradi decltype(izraz), ali taj izraz se nikad ne izracunava.
- Koja je bitna razlika između decltype i auto? - auto dodeljuje tip na osnovu izraza inicijalizatora (onoga sto se nalazi sa desne strane operatora dodele vrednosti), a decltype odredjuje na osnovu izraza u zagradi: decltype(izraz).
- Da li se auto može koristiti sa povratnom vrednosti funkcije i u kojim slučajevima? - Moze, bitno je da se funkcija koja vraca odredjeni tip pomocu return, bude pre toga definisana, a ne samo deklarisana.
- Kog je tipa string literal u C++ ("abcd")? - Tipa string.
- Kakvu razliku pravi pozicija gde se nalazi reč const u definiciji pokazivača? - Kad se const nadje ispred parametra koji je pokazivac, obezbedjuje se da funkcija ne menja objekat, a ispred tipa rezultata funkcije, obezbedjuje se nepromenljivost privremenog objekta rezultata.
- Na koje načine je moguće pristupiti imenu iz nekog prostora imena? - Razresenjem doksega: A::x; uvozom datog imena: using A::x; uvozom svih imena iz prostora imena: using namespace A.
- Da li je validno imati objekat istog imena kao i neki tip? - U jeziku C++, tehnički je dozvoljeno kreirati objekat sa imenom koje je isto kao ime nekog tipa.
- Da li je moguće imati isto ime (identifikator) za dve različite stvari u jednom prostoru imena, tj. da ime nije jednoznačno? - Nije moguce, mora da bude jednoznacno.
- Koji operatori su definisani za tipove nabrajanja (enum)? - Definisan je samo operator dodele vrednosti.
- Koje konverzije postoje za tipove nabrajanja? - Implicitna konverzija u osnovne tipove kao što su int, char, bool itd. Vrednost iz tipa nabrajanja može se eksplicitno konvertovati u druge tipove ili obrnuto koristeći statički kast (static_cast).
- Da li je moguće definisati koji tip koristi "under-the-hood" tip nabrajanja, da se ne koristi uvek int, i kako? - Moguce je, pomocu eksplicitnog navodjenja tipa koji se koristi za tipa nabrajanja (static_cast).
- Koja je razlika između običnog tipa nabrajanja i tipa nabrajanja sa ograničenim dosegom (enum class)? - Imena iz običnih tipova nabrajanja dele globalni opseg imena. Enumeracije sa ograničenim dosegom uvode lokalni opseg imena, što znači da imena enumeracija ne ulaze u globalni opseg imena.
- Kako se koristi incijalizatorska lista prilikom kreiranja unije? - Moze da se postavi samo prvo polje.
- Šta se dešava ukoliko inicijalizatorska lista sadrži više vrednosti nego što ima podataka ta struktura? - Visak je greska.
- Da li se inicijalizatorske liste mogu koristiti pri dodeli vrednosti? - Mogu.
- Kako se pristupa poljima bezimene unije/strukture? - Polja anonimnih unija i struktura se pristupaju direktno preko objekta koji ih sadrži.
- Da li je unija/struktura bezimena ako nema ime a ipak kreiramo bar jedan objekat ili pokazivač tog tipa? - Nije.
- Na koji način radi mutable polje? - Takvo polje moze da se menja cak i za nepromenljiv objekat strukture.
- Šta se dešava ukoliko operator new ne uspe da alocira memoriju jer nema dovoljno prostora? - Izbacuje se izuzetak bad_alloc.
- Šta se dešava ukoliko pokušamo da obrišemo nullptr sa delete operatorom? - Operator delete nema efekta.
- Šta vraća operator delete? Ne vraca rezultat (tip je void).
- Ukoliko dinamički alociramo matricu (više-dimenzioni niz, a ne niz nizova (
new Tacka[10][10]
)) da li dimenzije mogu biti promenljivi izrazi ili moraju biti konstante? - Sve dimenzije osim prve moraju da budu konstante, a taj promenljiv izraz mora da bude takav da moze da se izracuna u trenutku izvrsavanja naredbe sa operatorom new. - Da li je moguće napraviti niz referenci, pokazivač na referencu, referencu na pokazivač ili referencu na referencu? - Nije moguce napraviti niz referenci, referencu na referencu, pokazivac na referencu, ali je moguce napraviti referencu na pokazivac.
- Da li "moderna" verzija for-petlje (
for(tip prom: niz) naredba
) u svakom ciklusu petlje sadrži referencu ili kopiju tekućeg elementa niza, tj. da li promena objekta prom utiče na niz? - Sadrzi kopiju tekuceg elementa, a promena objekta prom ne utice na niz. - Da li je referenca na d-vrednost takođe d-vrednost ili je l-vrednost? - Referenca na d-vrednost je l-vrednost.
- Da li referenca na d-vrednost može upućivati na konstantnu/nepromenljivu d-vrednost? - Moze.
- Da li parametri funkcije mogu biti tipa reference na d-vrednost? - Mogu.
- Da li je dozvoljeno inicijalizovati referencu na d-vrednost pomoću l-vrednosti? - Nije.
- Gde treba da se nalazi deklaracija funkcije koja se neposredno ugrađuje (
inline
funkcije)? - Deklaracija funkcije koja se neposredno ugrađuje (inline funkcija) obično se nalazi u zaglavlju. - Kada se računaju podrazumevane vrednosti argumenata? - Ukoliko se pri pozivu funkcije ne navedu druge vrednosti argumenata.
- Da li je mehanizam preklapanja imena funkcije statički ili dinamički? - Staticki.
- Da li je dovoljno da se samo tipovi rezultata razlikuju da bi postojale dve funkcije istog imena? - Jeste.
- Da li rezultat ternarnog operatora može biti l-vrednost? - Moze.
- Da li su reinterpretirajuća i konstantna konverzija bezbedne? - Reinterpretirajuca konverzija nije bezbedna. Konstantna jeste ukoliko se dodaje const, nije ako se uklanja.
Klase i objekti
- Kako se formalnije nazivaju podaci i funkcije koji su deo klase? - Podaci = atributi, funkcije = metodi.
- Kako se naziva objekat koji poziva neki metod, a kako onaj čiji je metod pozvan? - Objekat koji poziva metod naziva se objekat-klijent, a objekat čiji se metod poziva je objekat-server.
- Da li može biti više sekcija vidljivosti iste vrste? - Može.
- Koja je podrazumevana sekcija, ako se ne navede nijedna druga? - Privatna (private).
- Da li atribut klase može biti tipa iste te klase, a šta važi ako je referenca ili pokazivač na taj tip? - Atributi ne mogu da budu tipa klase koja se definiše, ali mogu da budu pokazivači ili reference na tu klasu.
- Da li rezultati i parametri metoda mogu biti tipa iste te klase, a šta važi ako je referenca ili pokazivač na taj tip? - Vrednost rezultata, kao i parametri mogu da budu tipa klase čiji su članovi kao i tipa pokazivača ili reference na tu klasu.
- Na koji način možemo baratati sa objektima neke klase ukoliko imamo njenu deklaraciju, a ne i definiciju? - Pre definicije klase, a posle deklaracije mogu da se definišu pokazivači i reference na tu klasu, a ne mogu da se definišu objekti te klase.
- Koji operatori su ugrađeni, podrazumevani? - = & * . -> []
- Kog je tipa pokazivač
this
? - Tip ovog pokazivača je "konstantni pokazivač na klasu čiji je metod član". - Da li je dozvoljeno u metodi imati parametar istog imena kao i neki atribut te klase? - Da.
- Šta su metodi inspektori, a šta mutatori? - Metod koji ne menja stanje objekta je inspektor, a metod koji može i da menja stanje objekta je mutator.
- Kog je tipa pokazivač
this
u inspektor metodama? - const X*const - U koju svrhu se koristi modifikator
volatile
? - Kao napomena prevodiocu da ne vrši neke optimizacije jer objekat može da promeni stanje nezavisno od toka funkcije. - Da li je dovoljno da se dva metoda razliku samo u modifikatorima? - Da.
- Koji sve modifikatori postoje? - const, volatile, &, &&
- Koji je tip rezultata konstruktora? - Konstruktor nema tip rezultata (ni void).
- Da li konstruktor može imati parametar tipa te klase? - Ne može ako je jedini parametar.
- Kada se briše podrazumevani ugrađeni konstruktor? - Definisanjem nekog novog konstruktora se suspenduje ugrađeni.
- Da li je moguće kreirati niz objekata neke klase ukoliko ta klasa nema podrazumevani konstruktor? - Ne, jer se podrazumevani konstruktor poziva za svaki element niza.
- Da li je dozvoljeno ostaviti prazne zagrade pri definiciji automatskog objekta? - Nisu dozvoljene prazne zagrade () jer bi to bi se prevelo kao deklaracija.
- Koja je svrha
explicit
reči kod konstruktora? - Sprečavanje implicitne konverzije. - Kojim redosledom se izvršava incijalizacija atributa klase? - Redosledom navođenja u klasi.
- Da li atribut može da ima inicijalizator i u telu klase i u definiciji konstruktora? - Može. Ako atribut ima inicijalizator u telu klase i u definiciji konstruktora, primenjuje se inicijalizator iz definicije konstruktora.
- Kada je inicijalizacija atributa neophodna? - Inicijalizacija je neophodna: kada ne postoji podrazumevani konstruktor klase atributa, kada je atribut nepromenljiv podatak i kada je atribut referenca.
- Šta sme da postoji u listi incijalizatora kod delegirajućeg konstruktora? - Poziv drugog (ciljnog) konstruktora iste klase.
- Da li je prevodilac otkriva rekurzivno delegiranje (da se konstruktori ciklično pozivaju)? - Ne mora da je otkrije i tada se ulazi u beskonačnu rekurziju.
- Kako se implicitno briše kopirajući, a kako premeštajući konstruktor? - Kopirajući konstruktor implicitno se suspenduje pisanjem premeštajućeg konstruktora ili premeštajućeg operatora dodele. Ugrađeni premeštajući konstruktor se suspenduje ako se eksplicitno definiše: premeštajući konstruktor, kopirajući konstruktor, destruktor ili operator dodele.
- Kog tipa može biti parametar konstruktora kopije i da li može imati još parametara sa podrazumevanim vrednostima? - Konstruktor kopije ima parametar tipa XX& ili const XX&. Ostali parametri kopirajućeg konstruktora moraju da imaju podrazumevane vrednosti.
- Zašto se mora eksplicitno pisati premeštajući konstruktor ukoliko nam je potreban, tj. zašto nam nije dovoljan ugrađeni? - Zato što ugrađeni premeštajući konstruktor pravi plitku kopiju originala.
- Kog tipa može biti parametar konstruktora premeštanja i da li može imati još parametara sa podrazumevanim vrednostima? - Parametar premeštajućeg konst. je referenca na dvrednost: XX&&. Ostali parametri moraju da imaju podrazumevane vrednosti.
- Koji konstruktor se može pozvati ukoliko premeštajući ne postoji? - Ako u klasi ne postoji premeštajući, poziva se kopirajući konstruktor.
- Kog tipa rezultata je destruktor? - Nema tip rezultata.
- Da li destruktor može imati parametre i da li oni mogu imati podrazumevane vrednosti? - Ne može da ima parametre.
- Da li se destruktor može eksplicitno pozvati? - Može, npr. x.~X().
- Da li se statički atribut može i definisati u klasi, i koji slučaj je izuzetak? - U klasi se statički atribut samo deklariše, a definiše se na globalnom nivou. Izuzetak je imenovana celobrojna konstanta koja može da se definiše i u definiciji klase.
- Čime se inicijalizuje statički atribut ako se ne navede inicijalizator u definiciji? - Nulom.
- Da li se telo statičke metode može nalaziti u definiciji klase? - Može.
- Da li statičke metode mogu imati modifikatore? - Da.
- Šta se dešava ako preko konkretnog objekta pozovemo statički metod? - Klasa pokazanog objekta kao levog operanda se određuje statički.
- Da li je moguće pozvati statički metod ako nije kreiran nijedan objekat te klase? - Da.
- Koje osobine ima prijateljstvo među klasama? - Prijatelji klase mogu da pristupaju njenim privatnim članovima. Prijateljstvo je relacija koja reguliše isključivo pravo pristupa, a ne oblast važenja i vidljivost identifikatora. Prijateljstvo se ne nasleđuje, nije simetrična relacija i nije tranzitivna relacija
- Da li je moguće definisati prijateljsku metodu unutar definicije klase, da li se tad podrazumeva
inline
? - Ako se u definiciji klase navodi definicija prijateljske funkcije podrazumeva se inline. - Da li je bitno gde se oznaka prijateljstva nalazi, tj. u kojoj sekciji klase? - Nije.
- Da li prijateljska funkcija ima pokazivač
this
u sebi? - Prijateljska funkcija nema pokazivač this na objekat klase kojoj je prijatelj, - Da li prijateljske globalne funkcije mogu imati modifikatore, npr.
const
? - Modifikator nema smisla za globalnu prijateljsku funkciju. - Da li je moguća konverzija tipa nad kojim je pozvan objekat (skrivenog argumenta) u drugi tip? - Nije moguća konverzija skrivenog argumenta u drugi tip.
- Da li se doseg imena okružujuće klase proteže na ugnježdenu klasu i obratno? - Ugnežđena klasa (tip) se nalazi u dosegu imena okružujuće klase. Izvan okružujuće klase imenu ugnežđene klase može da se pristupi samo preko operatora proširenja dosega imena ::
- Da li je se u ugnježdenoj klasi može direktno pristupiti ne-statičkim poljima okružujuće klase? - Ne.
- Da li postoji neka relacija prijateljstva između ugnježdene i okružujuće klase? - Ugnežđena klasa je implicitno prijatelj okružujuće klase, ali okružujuća klasa nije prijatelj ugnežđene.
- Koju oblast važenja imaju lokalne klase? - Od deklaracije do kraja bloka u kojem je deklarisana.
- Da li je u lokalnoj klasi dozvoljeno pristupiti lokalnim promenljivama, a da li statičkim lokalnim promenljivama? - Dozvoljeno je samo pristupati statičkim lokalnim promenljivama.
- Da li metodi lokalne klase mogu da se definišu van definicije klase? - Ne. Metodi lokalne klase moraju da se definišu unutar definicije klase.
- Da li lokalna klasa može da ima statičke atribute? - Ne može.
Preklapanje operatora
- Koji operatori se ne mogu preklopiti?
- Da li je moguće promeniti osobine operatora?
- Kako se pišu operatori ako se simbol operatora sastoji od slova (npr.
new
)? - Da li operatorske funkcije mogu imati podrazumevane vrednosti?
- Da li operatorske metode mogu biti statički?
- Da li operatorske metode mogu imati modifikatore?
- Da li je moguće napisati operatorsku funkciju gde nijedan parametar nije klasnog tipa?
- Da li je moguće u programu imati isti operator i kao metod i kao globalnu funkciju?
- Da li operatorski metod dozvoljava konverzije?
- Kako se piše operatorska funkcija ako prvi operand nije klasnog tipa?
- Koji operatori moraju biti ne-statički?
- Kada se brišu ugrađeni kopirajući i premeštajući operatori dodele?
- Kako se razlikuje postfiksna i prefiksna varijanta prilikom pisanja inkrementirajućeg i dekrementirajućeg operatora?
- Šta su funkcijska klasa i funkcijski objekat?
- Kako se preklapa operator
->
? - Kog tipa treba da bude povratna vrednost operatora
->
? - Kog tipa može da bude povratna vrednost kast operatora?
- Kako se piše kast operator, šta se mora izostaviti u deklaraciji i definiciji?
- Na koja dva načina se može pozvati kast operator i koje ograničenje važi za jedan od načina?
- Koja je uloga modifikatora
explicit
kod kast operatora? - Kako se preklapaju operatori
new
idelete
? - Da li funkcije za operatore
new
idelete
treba da pozivaju konstruktore/destruktore? - Koju povratnu vrednost treba da ima operator
new
? - Da li klasa može imati više preklopljenjih operatora
new
i kako se to postiže? - Koliko preklopljenjih operatora
delete
funkcija može da ima? - Kako se unutar preklopljenjih operatora
new
idelete
pozivaju ugrađeni operatorinew
idelete
? - Da li operatori
new
idelete
mogu biti virtuelni? - Da li se operatori
new
idelete
nasleđuju? - Šta trebaju da vraćaju operatorske funkcije
<<
i>>
kada se realizuje unos/ispis? - Da li operatorske funkcije za unos/ispis mogu biti metode?
- Koji operatori se mogu napisati za nabrajajuće tipove?
Izvođenje
- Šta je višestruko izvođenje, da li je to i izvođenje iz već izvedene klase?
- Šta označava modifikator
final
kod klasa, a šta kod metoda? - Da li se može reč
final
pojaviti i kao identifikator? - Šta izvedena klasa ne nasleđuje iz osnovne?
- U kojim slučajevima se može pristupiti zaštićenim članovima iz metoda izvedene klase?
- Kako se može eksplicitno promeniti pravo pristupa nasleđenom članu, i da li se može promeniti pravo pristupa članu koji je u osnovnoj klasi privatan?
- Koja je razlika između javnog, privatnog i zaštićenog izvođenja, u kojim slučajevima objekat izvedene klase može da zameni objekat osnovne klase?
- Šta se dešava ukoliko u izvedenoj klasi napiše metod koji ima isto ime kao metod iz osnovne klase?
- Na koji način se može pristupiti sakrivenom polju osnovne klase?
- Kako se prilikom zaštićenog i privatnog izvođenja restaurira vidljivost svih metoda nekog imena, a kako samo pojedinačnog?
- Da li se konstruktori nasleđuju prilikom izvođenja?
- Šta se dešava kad se uvezu konstruktori?
- Koje izvođenje je podrazumevano?
- Da li se može izvesti iz unije i da li unije mogu izvoditi?
- Da li konstruktor može inicijalizovati nasleđene atribute?
- Da li je objekat izvedene klase uvek i objekat osnovne klase?
- Da li se virtuelnost funkcije nasleđuje, tj. da li se u izvedenim klasama mora navesti da je funkcija virtuelna?
- U kojim stvarima se potpis metode u izvedenoj klasi sme razlikovati od potpisa virtuelne metode u osnovnoj klasi, šta se dešava ako se razlikuje više?
- Da li se svaki virtuelni metod mora definisati u svakoj izvedenoj klasi i šta se dešava ako neki nije napisan?
- Kada se aktivira virtuelni mehanizam, tj. kako se objektu mora pristupiti?
- Koja je svrha modifikatora
override
, da li je to rezervisana reč? - Da li se i
override
ifinal
mogu zajedno naći u potpisu metoda? - Šta dodatno sadrži svaki objekat polimorfne klase?
- Da li statičke metode i globalne prijateljske funkcije mogu biti polimorfne, ako ne mogu kako se onda postiže polimorfno ponašanje kod njih?
- Da li konstruktori i destruktori mogu biti virtuelni i zašto?
- Da li izvedena klasa treba eksplicitno pozvati destruktor osnovne klase?
- Da li je niz objekata izvedene klase jedna vrsta niza objekata osnovne klase, da li se mogu bezbedno konvertovati, da li postoji slučaj kad može doći do greške i da li prevodilac to može otkriti?
- Da li je dozvoljena konverzija niza pokazivača na objekte izvedene klase u niz pokazivača na objekte osnovne klase?
- Kada je klasa virtuelna, a kada apstraktna?
- Da li je moguće imati primere apstraktne klase, a šta važi za pokazivače i reference takve klase?
- Kako je moguće sprečiti stvaranje objekata klase čije su svi metode konkretne i ne-apstraktne?
- Da li klasa može da ima apstraktni destruktor bez definicije?
- Da li klasa izvedena iz apstraktne klase mora da definiše sve apstraktne metode i šta se dešava ukoliko ih ne definiše?
- Da li apstraktna klasa može da ima konstruktor i kako on radi?
- Kakva mora da bude klasa pokazivača/reference koja se šalje kao parametar operatoru
dynamic_cast
? - Šta se dešava ukoliko pokazivač/referenca prosleđeni operatoru
dynamic_cast
ipak ne upućuju na objekat izvedene klase (ili klase još izvedenije iz nje) u koju se vrši konverzija? - Da li operator
typeid
izračunava izraz? - Šta vraća operator
typeid
kad je upotrebljen nad objektom polimorfne klase (u obliku reference ili dereferenciranog pokazivača), a šta nad objektom ne-polimorfne klase? - Šta se dešava ukoliko se u izrazu prosleđenom
typeid
operatoru dereferenciranullptr
pokazivač? - Koji koncept uvodi operator
typeid
? - Koji tip objekta vraća operator
typeid
i da li je moguće sačuvati njegov rezultat u promenljivu i zašto? - Šta je problem dijamant strukture i kako se rešava?
- Kojim redosledom se izvršava konstrukcija pri višestrukom nasleđivanju?
Izuzeci
- Kog tipa može biti bačeni izuzetak?
- Da li operator
noexcept
izračunava izraz i na koji način onda gleda tačnost? - Kojim redosledom treba navoditi rukovaoce?
- Koji je životni vek bačenog objekta?
- Šta se dešava ukoliko je bačen lokalni objekat?
- Šta se dešava sa atributima klase ukoliko se desi izuzetak u konstruktoru koji propagira van konstruktora?
- Koja je svrha funkcijske naredbe
try
? - Da li se u rukovaocima funkcijske naredbe
try
mogu koristiti parametri funkcije? - Šta moraju da urade rukovaoci funkcijske naredbe
try
na kraju svog izvršavanja? - Da li se treba pristupati atributima i nasleđenom podobjektu unutar rukovaoca funkcijskog
try
bloka konstruktora? - Šta se dešava na kraju rukovaoca funkcijskog
try
bloka konstruktora? - Čemu je ekvivalentan modifikator
noexcept
? - Da li konstruktor sa funkcijskim
try
blokom sme imatinoexcept
? - Šta se dešava ukoliko se za neki izuzetak ne pronađe rukovalac?
- Šta podrazumevano radi funkcija
terminate()
i da li je to moguće promeniti, i ukoliko je moguće šta ta alternativna funkcija mora na kraju da uradi? - Šta se dešava ukoliko se u funkciji desi neočekivan izuzetak (u funkciji označenoj sa
noexcept
ili ako izuzetak nije na listi očekivanih izuzetaka)? - Šta podrazumevano radi funkcija
terminate()
i da li je to moguće promeniti, i ukoliko je moguće šta ta alternativna funkcija mora na kraju da uradi? - Da li ijedna metoda klase izvedene iz
std::exception
sme da baci izuzetak i zašto?
Šabloni
- Da li je mehanizam generika statički ili dinamički?
- Da li ima smisla odvojeno prevođenje šablona, tj. pisanje istih u
.cpp
datotekama i koja je mana toga? - Šta mogu biti formalni parametri šablona?
- Kako se na zahtev generišu konkretne funkcije i klase iz šablona?
- Da li se implicitno mogu generisati konkretne funkcije i klase iz šablona i pod kojim uslovima?
- Kada je neophodno eksplicitno navesti stvarne argumente šablona funkcije?
- Kada će biti sprečeno automatsko generisanje funkcije iz šablona, a kako se može forsirati generisanje funkcije iz šablona?
- Da li se pri generisanju klase iz šablona generišu i sve njene virtuelne metode?
- Da li se može imenovati klasa pri generisanju iz šablona?
- Da li argumenti šablona mogu da imaju podrazumevane vrednosti i šta se dešava pri implicitnom zaključivanju kod šablonskih funkcija?
- Da li se podrazumevane vrednosti argumenata moraju navesti i prilikom definicije svakog metoda šablonske klase ili je dovoljno samo jednom prilikom definicije/deklaracije klase?
- Ako je formalni parametar šablona konstanta, kog tipa mora da bude?
- Iz kog razloga su samo konstantne dozvoljene kao parametri šablona, a ne i promenljive?
- Da li raniji formalni parametri se mogu koristiti za podrazumevane/početne vrednosti kasnijih parametara šablona?
- Da li funkcije mogu biti parametri šablona i ako ne šta se u tom slučaju radi?
- Kakvi su konstruktori inicijalizatorske liste?
- Koje javne metode imaju inicijalizatorske liste?
- Kako pišemo konstruktor klase ako želimo da objekat inicijalizujemo inicijalizatorskom listom proizvoljne dužine?
- Da li se argumenti konstruktora mogu navesti pomoću incijalizatorske liste i koja razlika postoji između tog načina i poziva konstruktora čiji je parametar inicijalizatorska lista?
- U kom slučaju se neće pozvati konstruktor koji prima inicijalizatorsku listu, a objekat se inicijalizuje inicijalizatorskom listom?
- Da li parametri šablona prilikom specijalizacije mogu imati podrazumevane vrednosti?
- Koja ograničenja važe za specijalizaciju šablona funkcije?
- Kada je specijalizacija moguća, a kada prestaje biti moguća?
- Šta se dešava ukoliko imamo više podjednako specijalizovanih šablona, kako se odlučuje koji šablon je najspecijalizovaniji?
- Da li metode klase mogu biti generičke, da li takve metode mogu biti virtuelne i da li mogu biti definisane i van klase?
- Da li konstruktori i destruktori mogu da budu generički (bez obzira na to da li je klasa generička)?
- Kako se pozivaju generički metodi, a kako generički konstruktori?
- Da li ugnježdene klase mogu da budu generičke i kakva mora da bude spoljašnja klasa?