ОО1/Питања
< ОО1
Пређи на навигацију
Пређи на претрагу
- Овај рок није решен. Помозите СИ Wики тако што ћете га решити.
Испод су сакупљена разна питања са презентација из предмета, засад без решења. Намењена су за обнављање градива пред колоквијум, како би студенти могли да тестирају своје знање одговарањем на њих.
Увод
- Приликом извођења, да ли се стари програмски код мора мењати, опет преводити и опет тестирати?
- Шта је апстракција?
- Која су 3 значајна напретка у еволуцији програмских језика?
- Од која два дела се свака класа састоји?
- Шта су објекти (и у ужем и у ширем смислу)?
- Да ли је полиморфизам статички или динамички механизам?
- Шта је полиморфизам?
- Шта су објектно-базирани језици, а шта објектно-оријентисани?
- Да ли је механизам обраде изузетака својствен само за објектно-оријентисане језике?
- Да ли је механизам преклапања оператора својствен само за објектно-оријентисане језике?
- Да ли се могу преклопити сви оператори?
- Да ли је генерички механизам статички или динамички?
Проширења C
- Шта је декларација, а шта дефиниција?
- Колико пута се смеју поновити декларације и дефиниције једног истог објекта/функције/типа?
- Каква може променљива да буде (и по веку трајања и по месту где се налази)?
- Шта је л-вредност, а шта д-вредност?
- Да ли увек са леве стране знака
=
може да стоји л-вредност? - Који оператори захтевају да им операнди буду л-вредности?
- Који оператори би требало да врате л-вредност?
- Коју област важења имају и колико трају: локална имена, глобална имена, статички објекти, динамички објекти, аутоматски објекти, привремени објекти?
- Да ли је могуће на неки начин приступити глобалном имену уколико је оно сакривено од стране локалног имена, а локалном имену у спољашњем блоку уколико је оно сакривено од стране локалног имена у унутрашњем блоку?
- Да ли се у услову
if
може дефинисати нека променљива и ако да каква мора да буде и колико она траје? - Да ли је унутар функције могуће имати променљиву истог имена као неки од параметара и ако не који је разлог?
- Коју област важења имају чланови структуре/класе?
- На које све начине се може приступити именима члановима класе, ван те класе?
- Коју област важења имају лабеле?
- Да ли је могуће са
goto
наредбом прескочити дефиницију неке променљиве и скочити на лабелу која се налази након ње? - Када се креирају статички објекти?
- Да ли је C++ строго или лабаво типизиран језик?
- Која је разлика између 4 каст оператора и кад се који користи?
- На која два начина можемо имплементирати кастовање (навести мане уколико их има неки начин)?
- Шта ради оператор
decltype
, да ли рачуна израз? - Која је битна разлика између
decltype
иauto
? - Да ли се
auto
може користити са повратном вредности функције и у којим случајевима? - Ког је типа стринг литерал у C++ ("абцд")?
- Какву разлику прави позиција где се налази реч
const
у дефиницији показивача? - На које начине је могуће приступити имену из неког простора имена?
- Да ли је валидно имати објекат истог имена као и неки тип?
- Да ли је могуће имати исто име (идентификатор) за две различите ствари у једном простору имена, тј. да име није једнозначно?
- Који оператори су дефинисани за типове набрајања (
enum
)? - Које конверзије постоје за типове набрајања?
- Да ли је могуће дефинисати који тип користи "ундер-тхе-хоод" тип набрајања, да се не користи увек
int
, и како? - Која је разлика између обичног типа набрајања и типа набрајања са ограниченим досегом (
enum class
)? - Како се користи инцијализаторска листа приликом креирања уније?
- Шта се дешава уколико иницијализаторска листа садржи више вредности него што има података та структура?
- Да ли се иницијализаторске листе могу користити при додели вредности?
- Како се приступа пољима безимене уније/структуре?
- Да ли је унија/структура безимена ако нема име а ипак креирамо бар један објекат или показивач тог типа?
- На који начин ради
mutable
поље? - Шта се дешава уколико оператор
new
не успе да алоцира меморију јер нема довољно простора? - Шта се дешава уколико покушамо да обришемо
nullptr
саdelete
оператором? - Шта враћа оператор
delete
? - Уколико динамички алоцирамо матрицу (више-димензиони низ, а не низ низова (
new Tacka[10][10]
)) да ли димензије могу бити променљиви изрази или морају бити константе? - Да ли је могуће направити низ референци, показивач на референцу, референцу на показивач или референцу на референцу?
- Да ли "модерна" верзија фор-петље (
for(tip prom: niz) naredba
) у сваком циклусу петље садржи референцу или копију текућег елемента низа, тј. да ли промена објектаprom
утиче на низ? - Да ли је референца на д-вредност такође д-вредност или је л-вредност?
- Да ли референца на д-вредност може упућивати на константну/непроменљиву д-вредност?
- Да ли параметри функције могу бити типа референце на д-вредност?
- Да ли је дозвољено иницијализовати референцу на д-вредност помоћу л-вредности?
- Где треба да се налази декларација функције која се непосредно уграђује (
inline
функције)? - Када се рачунају подразумеване вредности аргумената?
- Да ли је механизам преклапања имена функције статички или динамички?
- Да ли је довољно да се само типови резултата разликују да би постојале две функције истог имена?
- Да ли резултат тернарног оператора може бити л-вредност?
- Да ли су реинтерпретирајућа и константна конверзија безбедне?
Класе и објекти
- Како се формалније називају подаци и функције који су део класе?
- Како се назива објекат који позива неки метод, а како онај чији је метод позван?
- Да ли може бити више секција видљивости исте врсте?
- Која је подразумевана секција, ако се не наведе ниједна друга?
- Да ли атрибут класе може бити типа исте те класе, а шта важи ако је референца или показивач на тај тип?
- Да ли резултати и параметри метода могу бити типа исте те класе, а шта важи ако је референца или показивач на тај тип?
- На који начин можемо баратати са објектима неке класе уколико имамо њену декларацију, а не и дефиницију?
- Који оператори су уграђени, подразумевани?
- Ког је типа показивач
this
? - Да ли је дозвољено у методи имати параметар истог имена као и неки атрибут те класе?
- Шта су методи инспектори, а шта мутатори?
- Ког је типа показивач
this
у инспектор методама? - У коју сврху се користи модификатор
volatile
? - Да ли је довољно да се два метода разлику само у модификаторима?
- Који све модификатори постоје?
- Који је тип резултата конструктора?
- Да ли конструктор може имати параметар типа те класе?
- Када се брише подразумевани уграђени конструктор?
- Да ли је могуће креирати низ објеката неке класе уколико та класа нема подразумевани конструктор?
- Да ли је дозвољено оставити празне заграде при дефиницији аутоматског објекта?
- Која је сврха
explicit
речи код конструктора? - Којим редоследом се извршава инцијализација атрибута класе?
- Да ли атрибут може да има иницијализатор и у телу класе и у дефиницији конструктора?
- Када је иницијализација атрибута неопходна?
- Шта сме да постоји у листи инцијализатора код делегирајућег конструктора?
- Да ли је преводилац открива рекурзивно делегирање (да се конструктори циклично позивају)?
- Како се имплицитно брише копирајући, а како померајући конструктор?
- Ког типа може бити параметар конструктора копије и да ли може имати још параметара са подразумеваним вредностима?
- Зашто се мора експлицитно писати премештајући конструктор уколико нам је потребан, тј. зашто нам није довољан уграђени?
- Ког типа може бити параметар конструктора премештања и да ли може имати још параметара са подразумеваним вредностима?
- Који конструктор се може позвати уколико премештајући не постоји?
- Ког типа резултата је деструктор?
- Да ли деструктор може имати параметре и да ли они могу имати подразумеване вредности?
- Да ли се деструктор може експлицитно позвати?
- Да ли се статички атрибут може и дефинисати у класи, и који случај је изузетак?
- Чиме се иницијализује статички атрибут ако се не наведе иницијализатор у дефиницији?
- У ком случају се може дефинисати статички атрибут и у дефиницији класе?
- Да ли се тело статичке методе може налазити у дефиницији класе?
- Да ли статичке методе могу имати модификаторе?
- Шта се дешава ако преко конкретног објекта позовемо статички метод?
- Да ли је могуће позвати статички метод ако није креиран ниједан објекат те класе?
- Које особине има пријатељство међу класама?
- Да ли је пријатељ-методи или пријатељ-класи могуће ограничити област важења и видљивост идентификатора?
- Да ли је могуће дефинисати пријатељску методу унутар дефиниције класе, да ли се тад подразумева
inline
? - Да ли је битно где се ознака пријатељства налази, тј. у којој секцији класе?
- Да ли пријатељска функција има показивач
this
у себи? - Да ли пријатељске глобалне функције могу имати модификаторе, нпр.
const
? - Да ли је могућа конверзија типа над којим је позван објекат (скривеног аргумента) у други тип?
- Да ли се досег имена окружујуће класе протеже на угњеждену класу и обратно?
- Да ли је се у угњежденој класи може директно приступити не-статичким пољима окружујуће класе?
- Да ли постоји нека релација пријатељства између угњеждене и окружујуће класе?
- Коју област важења имају локалне класе?
- Да ли је у локалној класи дозвољено приступити локалним променљивама, а да ли статичким локалним променљивама?
- Да ли методи локалне класе могу да се дефинишу ван дефиниције класе?
- Да ли локална класа може да има статичке атрибуте?
Преклапање оператора
- Који оператори се не могу преклопити?
- Да ли је могуће променити особине оператора?
- Како се пишу оператори ако се симбол оператора састоји од слова (нпр.
new
)? - Да ли операторске функције могу имати подразумеване вредности?
- Да ли операторске методе могу бити статички?
- Да ли операторске методе могу имати модификаторе?
- Да ли је могуће написати операторску функцију где ниједан параметар није класног типа?
- Да ли је могуће у програму имати исти оператор и као метод и као глобалну функцију?
- Да ли операторски метод дозвољава конверзије?
- Како се пише операторска функција ако први операнд није класног типа?
- Који оператори морају бити не-статички?
- Када се бришу уграђени копирајући и премештајући оператори доделе?
- Како се разликује постфиксна и префиксна варијанта приликом писања инкрементирајућег и декрементирајућег оператора?
- Шта су функцијска класа и функцијски објекат?
- Како се преклапа оператор
->
? - Ког типа треба да буде повратна вредност оператора
->
? - Ког типа може да буде повратна вредност каст оператора?
- Како се пише каст оператор, шта се мора изоставити у декларацији и дефиницији?
- На која два начина се може позвати каст оператор и које ограничење важи за један од начина?
- Која је улога модификатора
explicit
код каст оператора? - Како се преклапају оператори
new
иdelete
? - Да ли функције за операторе
new
иdelete
треба да позивају конструкторе/деструкторе? - Коју повратну вредност треба да има оператор
new
? - Да ли класа може имати више преклопљењих оператора
new
и како се то постиже? - Колико преклопљењих оператора
delete
функција може да има? - Како се унутар преклопљењих оператора
new
иdelete
позивају уграђени операториnew
иdelete
? - Да ли оператори
new
иdelete
могу бити виртуелни? - Да ли се оператори
new
иdelete
наслеђују? - Шта требају да враћају операторске функције
<<
и>>
када се реализује унос/испис? - Да ли операторске функције за унос/испис могу бити методе?
- Који оператори се могу написати за набрајајуће типове?
Извођење
- Шта је вишеструко извођење, да ли је то и извођење из већ изведене класе?
- Шта означава модификатор
final
код класа, а шта код метода? - Да ли се може реч
final
појавити и као идентификатор? - Шта изведена класа не наслеђује из основне?
- У којим случајевима се може приступити заштићеним члановима из метода изведене класе?
- Како се може експлицитно променити право приступа наслеђеном члану, и да ли се може променити право приступа члану који је у основној класи приватан?
- Која је разлика између јавног, приватног и заштићеног извођења, у којим случајевима објекат изведене класе може да замени објекат основне класе?
- Шта се дешава уколико у изведеној класи напише метод који има исто име као метод из основне класе?
- На који начин се може приступити сакривеном пољу основне класе?
- Како се приликом заштићеног и приватног извођења рестаурира видљивост свих метода неког имена, а како само појединачног?
- Да ли се конструктори наслеђују приликом извођења?
- Шта се дешава кад се увезу конструктори?
- Које извођење је подразумевано?
- Да ли се може извести из уније и да ли уније могу изводити?
- Да ли конструктор може иницијализовати наслеђене атрибуте?
- Да ли је објекат изведене класе увек и објекат основне класе?
- Да ли се виртуелност функције наслеђује, тј. да ли се у изведеним класама мора навести да је функција виртуелна?
- У којим стварима се потпис методе у изведеној класи сме разликовати од потписа виртуелне методе у основној класи, шта се дешава ако се разликује више?
- Да ли се сваки виртуелни метод мора дефинисати у свакој изведеној класи и шта се дешава ако неки није написан?
- Када се активира виртуелни механизам, тј. како се објекту мора приступити?
- Која је сврха модификатора
override
, да ли је то резервисана реч? - Да ли се и
override
иfinal
могу заједно наћи у потпису метода? - Шта додатно садржи сваки објекат полиморфне класе?
- Да ли статичке методе и глобалне пријатељске функције могу бити полиморфне, ако не могу како се онда постиже полиморфно понашање код њих?
- Да ли конструктори и деструктори могу бити виртуелни и зашто?
- Да ли изведена класа треба експлицитно позвати деструктор основне класе?
- Да ли је низ објеката изведене класе једна врста низа објеката основне класе, да ли се могу безбедно конвертовати, да ли постоји случај кад може доћи до грешке и да ли преводилац то може открити?
- Да ли је дозвољена конверзија низа показивача на објекте изведене класе у низ показивача на објекте основне класе?
- Када је класа виртуелна, а када апстрактна?
- Да ли је могуће имати примере апстрактне класе, а шта важи за показиваче и референце такве класе?
- Како је могуће спречити стварање објеката класе чије су сви методе конкретне и не-апстрактне?
- Да ли класа може да има апстрактни деструктор без дефиниције?
- Да ли класа изведена из апстрактне класе мора да дефинише све апстрактне методе и шта се дешава уколико их не дефинише?
- Да ли апстрактна класа може да има конструктор и како он ради?
- Каква мора да буде класа показивача/референце која се шаље као параметар оператору
dynamic_cast
? - Шта се дешава уколико показивач/референца прослеђени оператору
dynamic_cast
ипак не упућују на објекат изведене класе (или класе још изведеније из ње) у коју се врши конверзија? - Да ли оператор
typeid
израчунава израз? - Шта враћа оператор
typeid
кад је употребљен над објектом полиморфне класе (у облику референце или дереференцираног показивача), а шта над објектом не-полиморфне класе? - Шта се дешава уколико се у изразу прослеђеном
typeid
оператору дереференцираnullptr
показивач? - Који концепт уводи оператор
typeid
? - Који тип објекта враћа оператор
typeid
и да ли је могуће сачувати његов резултат у променљиву и зашто? - Шта је проблем дијамант структуре и како се решава?
- Којим редоследом се извршава конструкција при вишеструком наслеђивању?
Изузеци
- Ког типа може бити бачени изузетак?
- Да ли оператор
noexcept
израчунава израз и на који начин онда гледа тачност? - Којим редоследом треба наводити руковаоце?
- Који је животни век баченог објекта?
- Шта се дешава уколико је бачен локални објекат?
- Шта се дешава са атрибутима класе уколико се деси изузетак у конструктору који пропагира ван конструктора?
- Која је сврха функцијске наредбе
try
? - Да ли се у руковаоцима функцијске наредбе
try
могу користити параметри функције? - Шта морају да ураде руковаоци функцијске наредбе
try
на крају свог извршавања? - Да ли се треба приступати атрибутима и наслеђеном подобјекту унутар руковаоца функцијског
try
блока конструктора? - Шта се дешава на крају руковаоца функцијског
try
блока конструктора? - Чему је еквивалентан модификатор
noexcept
? - Да ли конструктор са функцијским
try
блоком сме иматиnoexcept
? - Шта се дешава уколико се за неки изузетак не пронађе руковалац?
- Шта подразумевано ради функција
terminate()
и да ли је то могуће променити, и уколико је могуће шта та алтернативна функција мора на крају да уради? - Шта се дешава уколико се у функцији деси неочекиван изузетак (у функцији означеној са
noexcept
или ако изузетак није на листи очекиваних изузетака)? - Шта подразумевано ради функција
terminate()
и да ли је то могуће променити, и уколико је могуће шта та алтернативна функција мора на крају да уради? - Да ли иједна метода класе изведене из
std::exception
сме да баци изузетак и зашто?
Шаблони
- Да ли је механизам генерика статички или динамички?
- Да ли има смисла одвојено превођење шаблона, тј. писање истих у
.cpp
датотекама и која је мана тога? - Шта могу бити формални параметри шаблона?
- Како се на захтев генеришу конкретне функције и класе из шаблона?
- Да ли се имплицитно могу генерисати конкретне функције и класе из шаблона и под којим условима?
- Када је неопходно експлицитно навести стварне аргументе шаблона функције?
- Када ће бити спречено аутоматско генерисање функције из шаблона, а како се може форсирати генерисање функције из шаблона?
- Да ли се при генерисању класе из шаблона генеришу и све њене виртуелне методе?
- Да ли се може именовати класа при генерисању из шаблона?
- Да ли аргументи шаблона могу да имају подразумеване вредности и шта се дешава при имплицитном закључивању код шаблонских функција?
- Да ли се подразумеване вредности аргумената морају навести и приликом дефиниције сваког метода шаблонске класе или је довољно само једном приликом дефиниције/декларације класе?
- Ако је формални параметар шаблона константа, ког типа мора да буде?
- Из ког разлога су само константне дозвољене као параметри шаблона, а не и променљиве?
- Да ли ранији формални параметри се могу користити за подразумеване/почетне вредности каснијих параметара шаблона?
- Да ли функције могу бити параметри шаблона и ако не шта се у том случају ради?
- Какви су конструктори иницијализаторске листе?
- Које јавне методе имају иницијализаторске листе?
- Како пишемо конструктор класе ако желимо да објекат иницијализујемо иницијализаторском листом произвољне дужине?
- Да ли се аргументи конструктора могу навести помоћу инцијализаторске листе и која разлика постоји између тог начина и позива конструктора чији је параметар иницијализаторска листа?
- У ком случају се неће позвати конструктор који прима иницијализаторску листу, а објекат се иницијализује иницијализаторском листом?
- Да ли параметри шаблона приликом специјализације могу имати подразумеване вредности?
- Која ограничења важе за специјализацију шаблона функције?
- Када је специјализација могућа, а када престаје бити могућа?
- Шта се дешава уколико имамо више подједнако специјализованих шаблона, како се одлучује који шаблон је најспецијализованији?
- Да ли методе класе могу бити генеричке, да ли такве методе могу бити виртуелне и да ли могу бити дефинисане и ван класе?
- Да ли конструктори и деструктори могу да буду генерички (без обзира на то да ли је класа генеричка)?
- Како се позивају генерички методи, а како генерички конструктори?
- Да ли угњеждене класе могу да буду генеричке и каква мора да буде спољашња класа?