ОО1/Питања

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу
Овај рок није решен. Помозите СИ Wики тако што ћете га решити.

Испод су сакупљена разна питања са презентација из предмета, засад без решења. Намењена су за обнављање градива пред колоквијум, како би студенти могли да тестирају своје знање одговарањем на њих.

Увод

  1. Приликом извођења, да ли се стари програмски код мора мењати, опет преводити и опет тестирати? - Не.
  2. Шта је апстракција? - Препознавање битних својстава скупова сличних објеката и представљање заједничком класом.
  3. Која су 3 значајна напретка у еволуцији програмских језика? - Апстракција израза (ФОРТРАН), апстракција контроле (Алгол60) и апстракција података (Пасцал).
  4. Од која два дела се свака класа састоји? - Уговор (интерфејс) и имплементација.
  5. Шта су објекти (и у ужем и у ширем смислу)? - Објекти су примерци одговарајућих класа.
  6. Да ли је полиморфизам статички или динамички механизам? - Динамички.
  7. Шта је полиморфизам? - Понашање објекта не зависи само од типа показивача (упућивача) који показује на објекат већ од типа показиваног (упућиваног) објекта који је познат у време извршења.
  8. Шта су објектно-базирани језици, а шта објектно-оријентисани? - Објектно-засновани језици подржавају: апстракцију, капсулацију и модуларност. Објектно-оријентисани језици додатно подржавају принцип наслеђивања.
  9. Да ли је механизам обраде изузетака својствен само за објектно-оријентисане језике? - Не.
  10. Да ли је механизам преклапања оператора својствен само за објектно-оријентисане језике? - Не.
  11. Да ли се могу преклопити сви оператори? - Не.
  12. Да ли је генерички механизам статички или динамички? - Статички.

Проширења C

  1. Шта је декларација, а шта дефиниција? - Декларација је исказ који само уводи неко име (идентификатор) у програм и говори преводиоцу којој језичкој категорији припада. Дефиниција је она декларација која: ствара објекат, наводи тело функције или у потпуности наводи структуру корисничког типа.
  2. Колико пута се смеју поновити декларације и дефиниције једног истог објекта/функције/типа? - У програму може да постоји само једна дефиниција (једног објекта, функције, типа) и произвољно много декларација.
  3. Каква може променљива да буде? - Према досегу: глобална или локална. Према веку трајања: статичка, аутоматска, динамичка, привремена (транзијентна).
  4. Шта је л-вредност, а шта д-вредност? - L-вредност (лвалуе) је израз који упућује на објекат (у ширем смислу) или функцију. D-вредност (рвалуе) је израз који није лвредност.
  5. Да ли увек са леве стране знака = може да стоји л-вредност? - Не, могу само да стоје променљиве л-вредности, тј. свака л-вредност која није име функције, име низа, или константан објекат.
  6. Који оператори захтевају да им операнди буду л-вредности? - &, постфиксни: ++, - -, леви операнди доделе вредности
  7. Који оператори би требало да врате л-вредност? - унарни *, [ ], префиксни ++, - -, оператори доделе вредности
  8. Коју област важења имају и колико трају: локална имена, глобална имена, статички објекти, динамички објекти, аутоматски објекти, привремени објекти? - Аутоматски објекти: од дефиниције до напустања области вазења, статицки објекат: од дефиниције до краја изврсавања маин-а, динамицки објекат: зивотни век контролисе програмер (стварају се помоцу неw, брису се помоцу делете). Привремени објекат има кратак и недефинисан зивотни век.
  9. Да ли је могуће на неки начин приступити глобалном имену уколико је оно сакривено од стране локалног имена, а локалном имену у спољашњем блоку уколико је оно сакривено од стране локалног имена у унутрашњем блоку? - Глобалном имену могуце је приступити помоцу ‘::’, а локалном имену није могуце приступити. (проверити!!!)
  10. Да ли се у услову иф може дефинисати нека променљива и ако да каква мора да буде и колико она траје? - Мозе да се дефинисе променљива, и њен век трајања је од дефиниције до краја тхен, тј. елсе наредбе.
  11. Да ли је унутар функције могуће имати променљиву истог имена као неки од параметара и ако не који је разлог? - Да, унутар функције је могуће имати променљиву истог имена као неки од параметара.
  12. Коју област важења имају чланови структуре/класе? Имају област важења те исте класе.
  13. На које све начине се може приступити именима члановима класе, ван те класе? - Преко оператора: . (леви операнд објекат), -> (леви операнд показивач на објекат), :: (леви операнд име класе).
  14. Коју област важења имају лабеле? - Имају област важења функције у којој се наводе.
  15. Да ли је могуће са гото наредбом прескочити дефиницију неке променљиве и скочити на лабелу која се налази након ње? - Не, није могуће користити гото наредбу да прескочите дефиницију променљиве у C++. гото наредба се може користити за скакање на одређену ознаку (лабелу) унутар исте функције или блока кода, али не може прескочити дефиницију променљиве. Дефиниција променљиве мора бити укључена у ток извршавања програма.
  16. Када се креирају статички објекти? - Глобални статицки објекти, стварају се једном, на поцетку изврсавања програма. Локални статицки објекти стварају се при првом наиласку тока програма на њихову дефиницију.
  17. Да ли је C++ строго или лабаво типизиран језик? - C++ је хибридан језик, при манипулисању простим типовима је лабаво типизаран, док са слозеним корисницким типовима је строго типизиран.
  18. Која је разлика између 4 каст оператора и кад се који користи? - Статицки каст користи се за преносиве конверзије (измедју нумерицких типова, кастова које дефинисе програмер и неких показиваца у воид*), имплицитно се врси кад је безбедно. Реинтерпретирајуци каст намењен је за конверзије логицки неслицних типова (инт и показивац, нпр). Константа конверзија користи се за додавање или уклањање цонст. Додавање је сигурно, уклањање није. Динамицки каст јос постоји.
  19. На која два начина можемо имплементирати кастовање (навести мане уколико их има неки начин)? - Статиц_цаст и Дyнамиц_цаст. Мана дyнамиц_цаст-а је да се користи у контексту полиморфизма и захтева да класе имају бар један виртуални метод. Такође, дyнамиц_цаст је спорији од статиц_цаст-а, јер укључује провере у време извршавања (рунтиме цхецкс) и може вратити нуллптр када конверзија није могућа.
  20. Шта ради оператор децлтyпе, да ли рачуна израз? - Децлтyпе додељује онај тип података променљивој који се се налази у загради децлтyпе(израз), али тај израз се никад не израцунава.
  21. Која је битна разлика између децлтyпе и ауто? - ауто додељује тип на основу израза иницијализатора (онога сто се налази са десне стране оператора доделе вредности), а децлтyпе одредјује на основу израза у загради: децлтyпе(израз).
  22. Да ли се ауто може користити са повратном вредности функције и у којим случајевима? - Мозе, битно је да се функција која враца одредјени тип помоцу ретурн, буде пре тога дефинисана, а не само декларисана.
  23. Ког је типа стринг литерал у C++ ("абцд")? - Типа стринг.
  24. Какву разлику прави позиција где се налази реч цонст у дефиницији показивача? - Кад се цонст надје испред параметра који је показивац, обезбедјује се да функција не мења објекат, а испред типа резултата функције, обезбедјује се непроменљивост привременог објекта резултата.
  25. На које начине је могуће приступити имену из неког простора имена? - Разресењем доксега: А::x; увозом датог имена: усинг А::x; увозом свих имена из простора имена: усинг намеспаце А.
  26. Да ли је валидно имати објекат истог имена као и неки тип? - У језику C++, технички је дозвољено креирати објекат са именом које је исто као име неког типа.
  27. Да ли је могуће имати исто име (идентификатор) за две различите ствари у једном простору имена, тј. да име није једнозначно? - Није могуце, мора да буде једнознацно.
  28. Који оператори су дефинисани за типове набрајања (енум)? - Дефинисан је само оператор доделе вредности.
  29. Које конверзије постоје за типове набрајања? - Имплицитна конверзија у основне типове као што су инт, цхар, боол итд. Вредност из типа набрајања може се експлицитно конвертовати у друге типове или обрнуто користећи статички каст (статиц_цаст).
  30. Да ли је могуће дефинисати који тип користи "ундер-тхе-хоод" тип набрајања, да се не користи увек инт, и како? - Могуце је, помоцу експлицитног наводјења типа који се користи за типа набрајања (статиц_цаст).
  31. Која је разлика између обичног типа набрајања и типа набрајања са ограниченим досегом (енум цласс)? - Имена из обичних типова набрајања деле глобални опсег имена. Енумерације са ограниченим досегом уводе локални опсег имена, што значи да имена енумерација не улазе у глобални опсег имена.
  32. Како се користи инцијализаторска листа приликом креирања уније? - Мозе да се постави само прво поље.
  33. Шта се дешава уколико иницијализаторска листа садржи више вредности него што има података та структура? - Висак је греска.
  34. Да ли се иницијализаторске листе могу користити при додели вредности? - Могу.
  35. Како се приступа пољима безимене уније/структуре? - Поља анонимних унија и структура се приступају директно преко објекта који их садржи.
  36. Да ли је унија/структура безимена ако нема име а ипак креирамо бар један објекат или показивач тог типа? - Није.
  37. На који начин ради мутабле поље? - Такво поље мозе да се мења цак и за непроменљив објекат структуре.
  38. Шта се дешава уколико оператор неw не успе да алоцира меморију јер нема довољно простора? - Избацује се изузетак бад_аллоц.
  39. Шта се дешава уколико покушамо да обришемо нуллптр са делете оператором? - Оператор делете нема ефекта.
  40. Шта враћа оператор делете? Не враца резултат (тип је воид).
  41. Уколико динамички алоцирамо матрицу (више-димензиони низ, а не низ низова (new Tacka[10][10])) да ли димензије могу бити променљиви изрази или морају бити константе? - Све димензије осим прве морају да буду константе, а тај променљив израз мора да буде такав да мозе да се израцуна у тренутку изврсавања наредбе са оператором неw.
  42. Да ли је могуће направити низ референци, показивач на референцу, референцу на показивач или референцу на референцу? - Није могуце направити низ референци, референцу на референцу, показивац на референцу, али је могуце направити референцу на показивац.
  43. Да ли "модерна" верзија фор-петље (for(tip prom: niz) naredba) у сваком циклусу петље садржи референцу или копију текућег елемента низа, тј. да ли промена објекта пром утиче на низ? - Садрзи копију текуцег елемента, а промена објекта пром не утице на низ.
  44. Да ли је референца на д-вредност такође д-вредност или је л-вредност? - Референца на д-вредност је л-вредност.
  45. Да ли референца на д-вредност може упућивати на константну/непроменљиву д-вредност? - Мозе.
  46. Да ли параметри функције могу бити типа референце на д-вредност? - Могу.
  47. Да ли је дозвољено иницијализовати референцу на д-вредност помоћу л-вредности? - Није.
  48. Где треба да се налази декларација функције која се непосредно уграђује (inline функције)? - Декларација функције која се непосредно уграђује (инлине функција) обично се налази у заглављу.
  49. Када се рачунају подразумеване вредности аргумената? - Уколико се при позиву функције не наведу друге вредности аргумената.
  50. Да ли је механизам преклапања имена функције статички или динамички? - Статицки.
  51. Да ли је довољно да се само типови резултата разликују да би постојале две функције истог имена? - Јесте.
  52. Да ли резултат тернарног оператора може бити л-вредност? - Мозе.
  53. Да ли су реинтерпретирајућа и константна конверзија безбедне? - Реинтерпретирајуца конверзија није безбедна. Константна јесте уколико се додаје цонст, није ако се уклања.

Класе и објекти

  1. Како се формалније називају подаци и функције који су део класе? - Подаци = атрибути, функције = методи.
  2. Како се назива објекат који позива неки метод, а како онај чији је метод позван? - Објекат који позива метод назива се објекат-клијент, а објекат чији се метод позива је објекат-сервер.
  3. Да ли може бити више секција видљивости исте врсте? - Може.
  4. Која је подразумевана секција, ако се не наведе ниједна друга? - Приватна (привате).
  5. Да ли атрибут класе може бити типа исте те класе, а шта важи ако је референца или показивач на тај тип? - Атрибути не могу да буду типа класе која се дефинише, али могу да буду показивачи или референце на ту класу.
  6. Да ли резултати и параметри метода могу бити типа исте те класе, а шта важи ако је референца или показивач на тај тип? - Вредност резултата, као и параметри могу да буду типа класе чији су чланови као и типа показивача или референце на ту класу.
  7. На који начин можемо баратати са објектима неке класе уколико имамо њену декларацију, а не и дефиницију? - Пре дефиниције класе, а после декларације могу да се дефинишу показивачи и референце на ту класу, а не могу да се дефинишу објекти те класе.
  8. Који оператори су уграђени, подразумевани? - = & * . -> []
  9. Ког је типа показивач this? - Тип овог показивача је "константни показивач на класу чији је метод члан".
  10. Да ли је дозвољено у методи имати параметар истог имена као и неки атрибут те класе? - Да.
  11. Шта су методи инспектори, а шта мутатори? - Метод који не мења стање објекта је инспектор, а метод који може и да мења стање објекта је мутатор.
  12. Ког је типа показивач this у инспектор методама? - цонст X*цонст
  13. У коју сврху се користи модификатор volatile? - Као напомена преводиоцу да не врши неке оптимизације јер објекат може да промени стање независно од тока функције.
  14. Да ли је довољно да се два метода разлику само у модификаторима? - Да.
  15. Који све модификатори постоје? - цонст, волатиле, &, &&
  16. Који је тип резултата конструктора? - Конструктор нема тип резултата (ни воид).
  17. Да ли конструктор може имати параметар типа те класе? - Не може ако је једини параметар.
  18. Када се брише подразумевани уграђени конструктор? - Дефинисањем неког новог конструктора се суспендује уграђени.
  19. Да ли је могуће креирати низ објеката неке класе уколико та класа нема подразумевани конструктор? - Не, јер се подразумевани конструктор позива за сваки елемент низа.
  20. Да ли је дозвољено оставити празне заграде при дефиницији аутоматског објекта? - Нису дозвољене празне заграде () јер би то би се превело као декларација.
  21. Која је сврха explicit речи код конструктора? - Спречавање имплицитне конверзије.
  22. Којим редоследом се извршава инцијализација атрибута класе? - Редоследом навођења у класи.
  23. Да ли атрибут може да има иницијализатор и у телу класе и у дефиницији конструктора? - Може. Ако атрибут има иницијализатор у телу класе и у дефиницији конструктора, примењује се иницијализатор из дефиниције конструктора.
  24. Када је иницијализација атрибута неопходна? - Иницијализација је неопходна: када не постоји подразумевани конструктор класе атрибута, када је атрибут непроменљив податак и када је атрибут референца.
  25. Шта сме да постоји у листи инцијализатора код делегирајућег конструктора? - Позив другог (циљног) конструктора исте класе.
  26. Да ли је преводилац открива рекурзивно делегирање (да се конструктори циклично позивају)? - Не мора да је открије и тада се улази у бесконачну рекурзију.
  27. Како се имплицитно брише копирајући, а како премештајући конструктор? - Копирајући конструктор имплицитно се суспендује писањем премештајућег конструктора или премештајућег оператора доделе. Уграђени премештајући конструктор се суспендује ако се експлицитно дефинише: премештајући конструктор, копирајући конструктор, деструктор или оператор доделе.
  28. Ког типа може бити параметар конструктора копије и да ли може имати још параметара са подразумеваним вредностима? - Конструктор копије има параметар типа XX& или цонст XX&. Остали параметри копирајућег конструктора морају да имају подразумеване вредности.
  29. Зашто се мора експлицитно писати премештајући конструктор уколико нам је потребан, тј. зашто нам није довољан уграђени? - Зато што уграђени премештајући конструктор прави плитку копију оригинала.
  30. Ког типа може бити параметар конструктора премештања и да ли може имати још параметара са подразумеваним вредностима? - Параметар премештајућег конст. је референца на двредност: XX&&. Остали параметри морају да имају подразумеване вредности.
  31. Који конструктор се може позвати уколико премештајући не постоји? - Ако у класи не постоји премештајући, позива се копирајући конструктор.
  32. Ког типа резултата је деструктор? - Нема тип резултата.
  33. Да ли деструктор може имати параметре и да ли они могу имати подразумеване вредности? - Не може да има параметре.
  34. Да ли се деструктор може експлицитно позвати? - Може, нпр. x.~X().
  35. Да ли се статички атрибут може и дефинисати у класи, и који случај је изузетак? - У класи се статички атрибут само декларише, а дефинише се на глобалном нивоу. Изузетак је именована целобројна константа која може да се дефинише и у дефиницији класе.
  36. Чиме се иницијализује статички атрибут ако се не наведе иницијализатор у дефиницији? - Нулом.
  37. Да ли се тело статичке методе може налазити у дефиницији класе? - Може.
  38. Да ли статичке методе могу имати модификаторе? - Да.
  39. Шта се дешава ако преко конкретног објекта позовемо статички метод? - Класа показаног објекта као левог операнда се одређује статички.
  40. Да ли је могуће позвати статички метод ако није креиран ниједан објекат те класе? - Да.
  41. Које особине има пријатељство међу класама? - Пријатељи класе могу да приступају њеним приватним члановима. Пријатељство је релација која регулише искључиво право приступа, а не област важења и видљивост идентификатора. Пријатељство се не наслеђује, није симетрична релација и није транзитивна релација
  42. Да ли је могуће дефинисати пријатељску методу унутар дефиниције класе, да ли се тад подразумева inline? - Ако се у дефиницији класе наводи дефиниција пријатељске функције подразумева се инлине.
  43. Да ли је битно где се ознака пријатељства налази, тј. у којој секцији класе? - Није.
  44. Да ли пријатељска функција има показивач this у себи? - Пријатељска функција нема показивач тхис на објекат класе којој је пријатељ,
  45. Да ли пријатељске глобалне функције могу имати модификаторе, нпр. const? - Модификатор нема смисла за глобалну пријатељску функцију.
  46. Да ли је могућа конверзија типа над којим је позван објекат (скривеног аргумента) у други тип? - Није могућа конверзија скривеног аргумента у други тип.
  47. Да ли се досег имена окружујуће класе протеже на угњеждену класу и обратно? - Угнежђена класа (тип) се налази у досегу имена окружујуће класе. Изван окружујуће класе имену угнежђене класе може да се приступи само преко оператора проширења досега имена ::
  48. Да ли је се у угњежденој класи може директно приступити не-статичким пољима окружујуће класе? - Не.
  49. Да ли постоји нека релација пријатељства између угњеждене и окружујуће класе? - Угнежђена класа је имплицитно пријатељ окружујуће класе, али окружујућа класа није пријатељ угнежђене.
  50. Коју област важења имају локалне класе? - Од декларације до краја блока у којем је декларисана.
  51. Да ли је у локалној класи дозвољено приступити локалним променљивама, а да ли статичким локалним променљивама? - Дозвољено је само приступати статичким локалним променљивама.
  52. Да ли методи локалне класе могу да се дефинишу ван дефиниције класе? - Не. Методи локалне класе морају да се дефинишу унутар дефиниције класе.
  53. Да ли локална класа може да има статичке атрибуте? - Не може.

Преклапање оператора

  1. Који оператори се не могу преклопити? - Оператори ., .*, ::, ?:, сизеоф, алигноф, тyпеид и тхроw.
  2. Да ли је могуће променити особине оператора? - Не могу да се мењају особине оператора: н-арност, приоритет и асоцијативност.
  3. Како се пишу оператори ако се симбол оператора састоји од слова (нпр. new)? - Симбол оператора се мора писати одвојено од кључне речи оператор.
  4. Да ли операторске функције могу имати подразумеване вредности? - Не могу.
  5. Да ли операторски методи могу бити статички? - Не могу бити статчки (осим неw и делете).
  6. Да ли операторски методи могу имати модификаторе? - Да (нпр. цонст, волатиле, & и &&).
  7. Да ли је могуће написати операторску функцију где ниједан параметар није класног типа? - Не, бар један параметар мора бити класног типа.
  8. Да ли је могуће у програму имати исти оператор и као метод и као глобалну функцију? - Не.
  9. Да ли операторски метод дозвољава конверзије? - Операторски метод не дозвољава конверзију левог операнда.
  10. Како се пише операторска функција ако први операнд није класног типа? - Као глобална (пријатељска) функција.
  11. Који оператори морају бити нестатички? - Оператори =, [], (), -> и (тип).
  12. Када се бришу уграђени копирајући и премештајући оператори доделе? - Уграђена копирајућа додела се суспендује ако се у класи дефинише премештајући конструктор или премештају ћа додела. Премештајућа додела се суспендује ако се у класи дефинише коп./прем. конструктор, деструктор или коп. додела
  13. Како се разликује постфиксна и префиксна варијанта приликом писања инкрементирајућег и декрементирајућег оператора? - Префиксни: Т& оператор@@(), постфиксни: Т оператор@@(инт).
  14. Шта су функцијска класа и функцијски објекат? - Класа са преклопљеним оператором () – функцијска класа, објекат функцијске класе – функцијски објекат.
  15. Како се преклапа оператор ->? - Као нестатичка метода без параметара (унарни оператор).
  16. Ког типа треба да буде повратна вредност оператора ->? - Резултат треба да буде типа показивача на објекат класе која садржи цлан или објекат (или референца) класе за коју је такође дефинисан оператор->.
  17. Ког типа може да буде повратна вредност каст оператора? - Стандардни, изведени (нпр. показивач) или класни тип.
  18. Како се пише каст оператор, шта се мора изоставити у декларацији и дефиницији? - Тип повратне вредности функције не сме да буде наведен у декларацији/дефиницији и он се подразумева на основу имена функције.
  19. На која два начина се може позвати каст оператор и које ограничење важи за један од начина? - (Т)x или Т(x). Облик нотације Т(x) не може да се користи за типове са већим бројем речи (нпр. унсигнед лонг).
  20. Која је улога модификатора explicit код каст оператора? - Ако треба да се спречи имплицитна конверзија.
  21. Како се преклапају оператори new и delete? - Као статићки методи.
  22. Да ли функције за операторе new и delete треба да позивају конструкторе/деструкторе? - Не, јер се они позивају имплицитно.
  23. Коју повратну вредност треба да има оператор new? - Оператор неw треба да врати показивач на алоцирани простор.
  24. Да ли класа може имати више преклопљењих оператора new и како се то постиже? - Може ако они имају различите параметре.
  25. Колико преклопљењих оператора delete функција може да има? - Само по једну (за податак и низ) делете функцију.
  26. Како се унутар преклопљењих оператора new и delete позивају уграђени оператори new и delete? - Експлицитно, преко унарног оператора :: или имплицитно, када се динамички стварају/уништавају објекти који нису типа Т.
  27. Да ли оператори new и delete могу бити виртуелни? - Не.
  28. Да ли се оператори new и delete наслеђују? - Да.
  29. Шта треба да враћају операторске функције << и >> када се реализује унос/испис? - Референцу на леви операнд (остреам& и истреам&).
  30. Да ли операторске функције за унос/испис могу бити методе? - Не.
  31. Који оператори се могу написати за набрајајуће типове? - Дозвољено је преклапање оператора који се не преклапају као методи.

Извођење

  1. Шта је вишеструко извођење, да ли је то и извођење из већ изведене класе? - Вишеструко извођење подразумева да се класа наслеђује особине више основних класа. Извођење из из већ изведене класе такође спада под вишеструко.
  2. Шта означава модификатор финал код класа, а шта код метода? - final kod klasa označava da se klasa ne može naslediti (iz nje se ne može izvesti više nijedna klasa). Final je takođe modifikator metode koji sprečava nadjačavanje (override ) metode u izvedenoj klasi.
  3. Da li se može reč final pojaviti i kao identifikator? - Ne.
  4. Šta izvedena klasa ne nasleđuje iz osnovne? - Izvedena klasa iz osnovne klase ne nasleđuje sve atribute i metode označene sa final modifikatorom.
  5. U kojim slučajevima se može pristupiti zaštićenim članovima iz metoda izvedene klase? - Zaštićenim članovima se jedino može pristupiti kao nasleđenim članovima, a ne kao atributima osnovne klase.
  6. 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? - Eksplicitno može promeniti pomoću reči “using” (npr. using X::x1). Ne može se promeniti pravo pristupa privatnog člana osnovne klase, jer nasleđena nema pristup istim.
  7. 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? - Javno izvođenje realizuje koncept nasleđivanja (+ objekat izvedene može da zameni objekat osnovne klase), a privatno koncept sadržanja (+ objekat izvedene klase NE može da zameni objekat osnovne klase). Zaštićeno unutar izvedene klase iz zaštićeno izvedene realizuje koncept nasleđivanja, a izvan koncept sadržanja.
  8. Šta se dešava ukoliko u izvedenoj klasi napiše metod koji ima isto ime kao metod iz osnovne klase? - Prema svojstvu polimorfizma se originalna metoda preklapa nadjača, odnosno za svaku izvedenu klasu se koristi nova definicija date metode. Koja metoda će se koristiti, stara ili nova, se određuje dinamički, za vreme izvršavanja programa.
  9. Na koji način se može pristupiti sakrivenom polju osnovne klase? - U metodima izvedene klase se sakrivenim poljima osnovne klase pristupa pomoću ime_osnovne_klase::clan.
  10. Kako se prilikom zaštićenog i privatnog izvođenja restaurira vidljivost svih metoda nekog imena, a kako samo pojedinačnog? -
  11. Da li se konstruktori nasleđuju prilikom izvođenja? - Konstruktori osnovne klase se ne nasleđuju.
  12. Šta se dešava kad se uvezu konstruktori? - Kada se svi konstruktori uvezu sa “using ime_klase::ime_klase” generišu se konstruktori izvedene klase sa istim potpisima, koji imaju prazno telo, ali se samo implicitno pozivaju konstruktore osnovne sa istim potpisom.
  13. Koje izvođenje je podrazumevano? - Privatno izvođenje je podrazumevano.
  14. Da li se može izvesti iz unije i da li unije mogu izvoditi? - Ne, ne.
  15. Da li konstruktor može inicijalizovati nasleđene atribute? - Može, koristeći konstruktor osnovne klase, ali eksplicitna inicijalizacija nasleđenih atributa nije dozvoljena.
  16. Da li je objekat izvedene klase uvek i objekat osnovne klase? - Jeste ukoliko je klasa javno izvedena iz osnovne. Nije objekat osnovne klase, ukoliko je izvedena klasa privatno ili zaštićeno izvedena iz osnovne.
  17. Da li se virtuelnost funkcije nasleđuje, tj. da li se u izvedenim klasama mora navesti da je funkcija virtuelna? - Ne mora.
  18. 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? - Ako je rezultat virtuelne metode pokazivač/refernca na osnovnu klasu, redefinisani metod sme da vraća i pokazivač/referencu na klasu izvedenu iz date osnovne. Neslaganje potpisa istoimenog metoda rezultira u sakrivanju metoda. Ukoliko se potpis razlikuje samo po tipu rezultata, osim u navedenom slučaju, dešava se greška.
  19. Da li se svaki virtuelni metod mora definisati u svakoj izvedenoj klasi i šta se dešava ako neki nije napisan? - Ne mora se definisati u svakoj izvedenoj klasi, ako nije napisan važi nasleđeni virtualni metod iz osnovne klase.
  20. Kada se aktivira virtuelni mehanizam, tj. kako se objektu mora pristupiti? - Mora se pristupiti indirektno - preko reference ili pokazivača.
  21. Koja je svrha modifikatora override, da li je to rezervisana reč? - Eksplicitno se ukazuje da metod nadjačava odgovorajući virtuelni metod, nije rezervisana reč.
  22. Da li se i override i final mogu zajedno naći u potpisu metoda? - Mogu.
  23. Šta klasu čini polimorfnom? - Klasa je polimorfna ukoliko sadrži barem jednu virtuelnu metodu.
  24. Šta dodatno sadrži svaki objekat polimorfne klase? - Pokazivač na TVF (tabelu virtuelnih funkcija)
  25. 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? - Ne mogu. Statičke metode moraju da pozivaju nestatički virtuelni metod za neki objekat date klase, pokazivač/referenca na objekat može da seprosledi kao parametar. Problem kod globalnih prijateljskih funkcija se rešava na isti način.
  26. Da li konstruktori i destruktori mogu biti virtuelni i zašto? - Konstrukor ne može biti virtualan jer se poziva pre no što se objekat kreira. Destruktor može biti virtualan, tada se tek u vreme izvršenja određuje koji se destrukor poziva.
  27. Da li izvedena klasa treba eksplicitno pozvati destruktor osnovne klase? - Ne, jer se implicitno poziva konstruktor osnovne klase.
  28. 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? - Ne, nije. Bezbedna konverzija, pokazivača/reference na objekat(e) izvedene klase u osnovnu, je moguća ukoliko je izvedena klasa javno izvedena iz osnovne. Ukoliko je privatno izvedena, pokazivač na objekat(e) takve klase može se implicitno konvertovati samo unutar izvedene klase, u suprotnom nastaje greška, koju bi prevodilac trebao da otkrije pre prevođenja.
  29. Da li je dozvoljena konverzija niza pokazivača na objekte izvedene klase u niz pokazivača na objekte osnovne klase? - Jeste, samo ukoliko je izvedena klasa javno izvedena iz osnovne.
  30. Kada je klasa virtuelna, a kada apstraktna? - Virtuelna je kada su njeni metodi definisani, ali se mogu redefinisati u izvedenim klasama. Apstraktna je barem jedna metoda klase samo deklarisana, te se mora definisati u izvedenoj klase.
  31. Da li je moguće imati primere apstraktne klase, a šta važi za pokazivače i reference takve klase? - Nije moguće instancirati apstraktnu klasu, ali mogu da postoje pokazivači/reference na istu.
  32. Kako je moguće sprečiti stvaranje objekata klase čije su svi metode konkretne i ne-apstraktne? - Deklaracijom apstraktnog konstruktora (virtual ~Klasa() = 0)
  33. Da li klasa može da ima apstraktni destruktor bez definicije? - Ne, ne može. Apstraktni destruktor mora biti definisan van tela klase.
  34. Da li klasa izvedena iz apstraktne klase mora da definiše sve apstraktne metode i šta se dešava ukoliko ih ne definiše? - Izvedena klasa ne mora da definiše sve metode apstraktne klase, ali tada je i ona sama apstraktna.
  35. Da li apstraktna klasa može da ima konstruktor i kako on radi? - Može, on se poziva pri konstrukciji konkretnih objekata, izvedenih iz apstraktne klase.
  36. Kakva mora da bude klasa pokazivača/reference koja se šalje kao parametar operatoru dynamic_cast? - Klasa mora biti polimorfna, u suprotnom se dešava greška pri prevođenju.
  37. Š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? - Baca se izuzetak bad_cast, koji je definisan u <typeinfo>.
  38. Da li operator typeid izračunava izraz? - Ne.
  39. Š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? - Rezultat se odnosi na dinamički tip operanda, u sportnom se odnosi na statički. (slide 52 u “Izvođenje” za primer kako ovo radi).
  40. Šta se dešava ukoliko se u izrazu prosleđenom typeid operatoru dereferencira nullptr pokazivač? - Ukoliko pokazivač pokazuje na polimorfnu klasu, baca se izuzetak bad_typeid, inače se rezulat odnosi na statički tip pokazivača (X *p -> info za X).
  41. Koji koncept uvodi operator typeid? - Introspekciju/refleksiju, način da program saznaje o sebi.
  42. Koji tip objekta vraća operator typeid i da li je moguće sačuvati njegov rezultat u promenljivu i zašto? - Tip objekta je type_info, njegov rezultat se ne može sačuvati u promenljivu jer klasa type_info nema javne konstruktore.
  43. Šta je problem dijamant strukture i kako se rešava? - Kada su osnovne klase pri višestrukom izvođenju izvedene iz iste klase. Ovaj problem se rešava tako što se ta ista klasa deklariše kao virtuelna osnovna klasa. (slide 57 u “Izvođenje” za primer)
  44. Kojim redosledom se izvršava konstrukcija pri višestrukom nasleđivanju? - Prvo se izvršava konstrukcija svih osnovnih klasa, po redosledu deklaracije, potom konstrukcija atributa izvedene klase i na kraju konstruktor izvedene klase.

Izuzeci

  1. Kog tipa može biti bačeni izuzetak?
  2. Da li operator noexcept израчунава израз и на који начин онда гледа тачност?
  3. Којим редоследом треба наводити руковаоце?
  4. Који је животни век баченог објекта?
  5. Шта се дешава уколико је бачен локални објекат?
  6. Шта се дешава са атрибутима класе уколико се деси изузетак у конструктору који пропагира ван конструктора?
  7. Која је сврха функцијске наредбе try?
  8. Да ли се у руковаоцима функцијске наредбе try могу користити параметри функције?
  9. Шта морају да ураде руковаоци функцијске наредбе try на крају свог извршавања?
  10. Да ли се треба приступати атрибутима и наслеђеном подобјекту унутар руковаоца функцијског try блока конструктора?
  11. Шта се дешава на крају руковаоца функцијског try блока конструктора?
  12. Чему је еквивалентан модификатор noexcept?
  13. Да ли конструктор са функцијским try блоком сме имати noexcept?
  14. Шта се дешава уколико се за неки изузетак не пронађе руковалац?
  15. Шта подразумевано ради функција terminate() и да ли је то могуће променити, и уколико је могуће шта та алтернативна функција мора на крају да уради?
  16. Шта се дешава уколико се у функцији деси неочекиван изузетак (у функцији означеној са noexcept или ако изузетак није на листи очекиваних изузетака)?
  17. Шта подразумевано ради функција terminate() и да ли је то могуће променити, и уколико је могуће шта та алтернативна функција мора на крају да уради?
  18. Да ли иједна метода класе изведене из std::exception сме да баци изузетак и зашто?

Шаблони

  1. Да ли је механизам генерика статички или динамички?
  2. Да ли има смисла одвојено превођење шаблона, тј. писање истих у .cpp датотекама и која је мана тога?
  3. Шта могу бити формални параметри шаблона?
  4. Како се на захтев генеришу конкретне функције и класе из шаблона?
  5. Да ли се имплицитно могу генерисати конкретне функције и класе из шаблона и под којим условима?
  6. Када је неопходно експлицитно навести стварне аргументе шаблона функције?
  7. Када ће бити спречено аутоматско генерисање функције из шаблона, а како се може форсирати генерисање функције из шаблона?
  8. Да ли се при генерисању класе из шаблона генеришу и све њене виртуелне методе?
  9. Да ли се може именовати класа при генерисању из шаблона?
  10. Да ли аргументи шаблона могу да имају подразумеване вредности и шта се дешава при имплицитном закључивању код шаблонских функција?
  11. Да ли се подразумеване вредности аргумената морају навести и приликом дефиниције сваког метода шаблонске класе или је довољно само једном приликом дефиниције/декларације класе?
  12. Ако је формални параметар шаблона константа, ког типа мора да буде?
  13. Из ког разлога су само константне дозвољене као параметри шаблона, а не и променљиве?
  14. Да ли ранији формални параметри се могу користити за подразумеване/почетне вредности каснијих параметара шаблона?
  15. Да ли функције могу бити параметри шаблона и ако не шта се у том случају ради?
  16. Какви су конструктори иницијализаторске листе?
  17. Које јавне методе имају иницијализаторске листе?
  18. Како пишемо конструктор класе ако желимо да објекат иницијализујемо иницијализаторском листом произвољне дужине?
  19. Да ли се аргументи конструктора могу навести помоћу инцијализаторске листе и која разлика постоји између тог начина и позива конструктора чији је параметар иницијализаторска листа?
  20. У ком случају се неће позвати конструктор који прима иницијализаторску листу, а објекат се иницијализује иницијализаторском листом?
  21. Да ли параметри шаблона приликом специјализације могу имати подразумеване вредности?
  22. Која ограничења важе за специјализацију шаблона функције?
  23. Када је специјализација могућа, а када престаје бити могућа?
  24. Шта се дешава уколико имамо више подједнако специјализованих шаблона, како се одлучује који шаблон је најспецијализованији?
  25. Да ли методе класе могу бити генеричке, да ли такве методе могу бити виртуелне и да ли могу бити дефинисане и ван класе?
  26. Да ли конструктори и деструктори могу да буду генерички (без обзира на то да ли је класа генеричка)?
  27. Како се позивају генерички методи, а како генерички конструктори?
  28. Да ли угњеждене класе могу да буду генеричке и каква мора да буде спољашња класа?