ОО1/Питања — разлика између измена
< ОО1
Пређи на навигацију
Пређи на претрагу
(Нова страница: {{tocright}} {{nerešeno}} Ispod su sakupljena razna pitanja sa prezentacija iz predmeta, zasad bez rešenja. Namenjena su za obnavljanje gradiva pred kolokvijum, kako…) |
м (Kategorizacija) |
||
Ред 256: | Ред 256: | ||
# Kako se pozivaju generički metodi, a kako generički konstruktori? | # 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? | # Da li ugnježdene klase mogu da budu generičke i kakva mora da bude spoljašnja klasa? | ||
[[Категорија:ОО1]] |
Верзија на датум 22. август 2022. у 19:10
- Овај рок није решен. Помозите 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?
- Šta je apstrakcija?
- Koja su 3 značajna napretka u evoluciji programskih jezika?
- Od koja dva dela se svaka klasa sastoji?
- Šta su objekti (i u užem i u širem smislu)?
- Da li je polimorfizam statički ili dinamički mehanizam?
- Šta je polimorfizam?
- Šta su objektno-bazirani jezici, a šta objektno-orijentisani?
- Da li je mehanizam obrade izuzetaka svojstven samo za objektno-orijentisane jezike?
- Da li je mehanizam preklapanja operatora svojstven samo za objektno-orijentisane jezike?
- Da li se mogu preklopiti svi operatori?
- Da li je generički mehanizam statički ili dinamički?
Proširenja C
- Šta je deklaracija, a šta definicija?
- Koliko puta se smeju ponoviti deklaracije i definicije jednog istog objekta/funkcije/tipa?
- Kakva može promenljiva da bude (i po veku trajanja i po mestu gde se nalazi)?
- Šta je l-vrednost, a šta d-vrednost?
- Da li uvek sa leve strane znaka
=
može da stoji l-vrednost? - Koji operatori zahtevaju da im operandi budu l-vrednosti?
- Koji operatori bi trebalo da vrate l-vrednost?
- Koju oblast važenja imaju i koliko traju: lokalna imena, globalna imena, statički objekti, dinamički objekti, automatski objekti, privremeni objekti?
- 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 se u uslovu
if
može definisati neka promenljiva i ako da kakva mora da bude i koliko ona traje? - Da li je unutar funkcije moguće imati promenljivu istog imena kao neki od parametara i ako ne koji je razlog?
- Koju oblast važenja imaju članovi strukture/klase?
- Na koje sve načine se može pristupiti imenima članovima klase, van te klase?
- Koju oblast važenja imaju labele?
- Da li je moguće sa
goto
naredbom preskočiti definiciju neke promenljive i skočiti na labelu koja se nalazi nakon nje? - Kada se kreiraju statički objekti?
- Da li je C++ strogo ili labavo tipiziran jezik?
- Koja je razlika između 4 kast operatora i kad se koji koristi?
- Na koja dva načina možemo implementirati kastovanje (navesti mane ukoliko ih ima neki način)?
- Šta radi operator
decltype
, da li računa izraz? - Koja je bitna razlika između
decltype
iauto
? - Da li se
auto
može koristiti sa povratnom vrednosti funkcije i u kojim slučajevima? - Kog je tipa string literal u C++ ("abcd")?
- Kakvu razliku pravi pozicija gde se nalazi reč
const
u definiciji pokazivača? - Na koje načine je moguće pristupiti imenu iz nekog prostora imena?
- Da li je validno imati objekat istog imena kao i neki tip?
- Da li je moguće imati isto ime (identifikator) za dve različite stvari u jednom prostoru imena, tj. da ime nije jednoznačno?
- Koji operatori su definisani za tipove nabrajanja (
enum
)? - Koje konverzije postoje za tipove nabrajanja?
- Da li je moguće definisati koji tip koristi "under-the-hood" tip nabrajanja, da se ne koristi uvek
int
, i kako? - Koja je razlika između običnog tipa nabrajanja i tipa nabrajanja sa ograničenim dosegom (
enum class
)? - Kako se koristi incijalizatorska lista prilikom kreiranja unije?
- Šta se dešava ukoliko inicijalizatorska lista sadrži više vrednosti nego što ima podataka ta struktura?
- Da li se inicijalizatorske liste mogu koristiti pri dodeli vrednosti?
- Kako se pristupa poljima bezimene unije/strukture?
- Da li je unija/struktura bezimena ako nema ime a ipak kreiramo bar jedan objekat ili pokazivač tog tipa?
- Na koji način radi
mutable
polje? - Šta se dešava ukoliko operator
new
ne uspe da alocira memoriju jer nema dovoljno prostora? - Šta se dešava ukoliko pokušamo da obrišemo
nullptr
sadelete
operatorom? - Šta vraća operator
delete
? - 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? - Da li je moguće napraviti niz referenci, pokazivač na referencu, referencu na pokazivač ili referencu na referencu?
- 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 objektaprom
utiče na niz? - Da li je referenca na d-vrednost takođe d-vrednost ili je l-vrednost?
- Da li referenca na d-vrednost može upućivati na konstantnu/nepromenljivu d-vrednost?
- Da li parametri funkcije mogu biti tipa reference na d-vrednost?
- Da li je dozvoljeno inicijalizovati referencu na d-vrednost pomoću l-vrednosti?
- Gde treba da se nalazi deklaracija funkcije koja se neposredno ugrađuje (
inline
funkcije)? - Kada se računaju podrazumevane vrednosti argumenata?
- Da li je mehanizam preklapanja imena funkcije statički ili dinamički?
- Da li je dovoljno da se samo tipovi rezultata razlikuju da bi postojale dve funkcije istog imena?
- Da li rezultat ternarnog operatora može biti l-vrednost?
- Da li su reinterpretirajuća i konstantna konverzija bezbedne?
Klase i objekti
- Kako se formalnije nazivaju podaci i funkcije koji su deo klase?
- Kako se naziva objekat koji poziva neki metod, a kako onaj čiji je metod pozvan?
- Da li može biti više sekcija vidljivosti iste vrste?
- Koja je podrazumevana sekcija, ako se ne navede nijedna druga?
- Da li atribut klase može biti tipa iste te klase, a šta važi ako je referenca ili pokazivač na taj tip?
- Da li rezultati i parametri metoda mogu biti tipa iste te klase, a šta važi ako je referenca ili pokazivač na taj tip?
- Na koji način možemo baratati sa objektima neke klase ukoliko imamo njenu deklaraciju, a ne i definiciju?
- Koji operatori su ugrađeni, podrazumevani?
- Kog je tipa pokazivač
this
? - Da li je dozvoljeno u metodi imati parametar istog imena kao i neki atribut te klase?
- Šta su metodi inspektori, a šta mutatori?
- Kog je tipa pokazivač
this
u inspektor metodama? - U koju svrhu se koristi modifikator
volatile
? - Da li je dovoljno da se dva metoda razliku samo u modifikatorima?
- Koji sve modifikatori postoje?
- Koji je tip rezultata konstruktora?
- Da li konstruktor može imati parametar tipa te klase?
- Kada se briše podrazumevani ugrađeni konstruktor?
- Da li je moguće kreirati niz objekata neke klase ukoliko ta klasa nema podrazumevani konstruktor?
- Da li je dozvoljeno ostaviti prazne zagrade pri definiciji automatskog objekta?
- Koja je svrha
explicit
reči kod konstruktora? - Kojim redosledom se izvršava incijalizacija atributa klase?
- Da li atribut može da ima inicijalizator i u telu klase i u definiciji konstruktora?
- Kada je inicijalizacija atributa neophodna?
- Šta sme da postoji u listi incijalizatora kod delegirajućeg konstruktora?
- Da li je prevodilac otkriva rekurzivno delegiranje (da se konstruktori ciklično pozivaju)?
- Kako se implicitno briše kopirajući, a kako pomerajući konstruktor?
- Kog tipa može biti parametar konstruktora kopije i da li može imati još parametara sa podrazumevanim vrednostima?
- Zašto se mora eksplicitno pisati premeštajući konstruktor ukoliko nam je potreban, tj. zašto nam nije dovoljan ugrađeni?
- Kog tipa može biti parametar konstruktora premeštanja i da li može imati još parametara sa podrazumevanim vrednostima?
- Koji konstruktor se može pozvati ukoliko premeštajući ne postoji?
- Kog tipa rezultata je destruktor?
- Da li destruktor može imati parametre i da li oni mogu imati podrazumevane vrednosti?
- Da li se destruktor može eksplicitno pozvati?
- Da li se statički atribut može i definisati u klasi, i koji slučaj je izuzetak?
- Čime se inicijalizuje statički atribut ako se ne navede inicijalizator u definiciji?
- U kom slučaju se može definisati statički atribut i u definiciji klase?
- Da li se telo statičke metode može nalaziti u definiciji klase?
- Da li statičke metode mogu imati modifikatore?
- Šta se dešava ako preko konkretnog objekta pozovemo statički metod?
- Da li je moguće pozvati statički metod ako nije kreiran nijedan objekat te klase?
- Koje osobine ima prijateljstvo među klasama?
- Da li je prijatelj-metodi ili prijatelj-klasi moguće ograničiti oblast važenja i vidljivost identifikatora?
- Da li je moguće definisati prijateljsku metodu unutar definicije klase, da li se tad podrazumeva
inline
? - Da li je bitno gde se oznaka prijateljstva nalazi, tj. u kojoj sekciji klase?
- Da li prijateljska funkcija ima pokazivač
this
u sebi? - Da li prijateljske globalne funkcije mogu imati modifikatore, npr.
const
? - Da li je moguća konverzija tipa nad kojim je pozvan objekat (skrivenog argumenta) u drugi tip?
- Da li se doseg imena okružujuće klase proteže na ugnježdenu klasu i obratno?
- Da li je se u ugnježdenoj klasi može direktno pristupiti ne-statičkim poljima okružujuće klase?
- Da li postoji neka relacija prijateljstva između ugnježdene i okružujuće klase?
- Koju oblast važenja imaju lokalne klase?
- Da li je u lokalnoj klasi dozvoljeno pristupiti lokalnim promenljivama, a da li statičkim lokalnim promenljivama?
- Da li metodi lokalne klase mogu da se definišu van definicije klase?
- Da li lokalna klasa može da ima statičke atribute?
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?