ОО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 код класа означава да се класа не може наследити (из ње се не може извести више ниједна класа). Финал је такође модификатор методе који спречава надјачавање (override ) методе у изведеној класи.
  3. Да ли се може реч финал појавити и као идентификатор? - Не.
  4. Шта изведена класа не наслеђује из основне? - Изведена класа из основне класе не наслеђује све атрибуте и методе означене са final модификатором.
  5. У којим случајевима се може приступити заштићеним члановима из метода изведене класе? - Заштићеним члановима се једино може приступити као наслеђеним члановима, а не као атрибутима основне класе.
  6. Како се може експлицитно променити право приступа наслеђеном члану, и да ли се може променити право приступа члану који је у основној класи приватан? - Експлицитно може променити помоћу речи “усинг” (нпр. усинг X::x1). Не може се променити право приступа приватног члана основне класе, јер наслеђена нема приступ истим.
  7. Која је разлика између јавног, приватног и заштићеног извођења, у којим случајевима објекат изведене класе може да замени објекат основне класе? - Јавно извођење реализује концепт наслеђивања (+ објекат изведене може да замени објекат основне класе), а приватно концепт садржања (+ објекат изведене класе НЕ може да замени објекат основне класе). Заштићено унутар изведене класе из заштићено изведене реализује концепт наслеђивања, а изван концепт садржања.
  8. Шта се дешава уколико у изведеној класи напише метод који има исто име као метод из основне класе? - Према својству полиморфизма се оригинална метода преклапа надјача, односно за сваку изведену класу се користи нова дефиниција дате методе. Која метода ће се користити, стара или нова, се одређује динамички, за време извршавања програма.
  9. На који начин се може приступити сакривеном пољу основне класе? - У методима изведене класе се сакривеним пољима основне класе приступа помоћу ime_osnovne_klase::clan.
  10. Како се приликом заштићеног и приватног извођења рестаурира видљивост свих метода неког имена, а како само појединачног? - Сви методи неког имена се рестаурирају помоћу using osnovna_klasa::ime_metoda (неће бити видљиви методи основне са истим потписом као методи изведене класе). Не може да се рестаурира видљивост појединачног метода основне класе.
  11. Да ли се конструктори наслеђују приликом извођења? - Конструктори основне класе се не наслеђују.
  12. Шта се дешава кад се увезу конструктори? - Када се сви конструктори увезу са “усинг име_класе::име_класе” генеришу се конструктори изведене класе са истим потписима, који имају празно тело, али се само имплицитно позивају конструкторе основне са истим потписом.
  13. Које извођење је подразумевано? - Приватно извођење је подразумевано.
  14. Да ли се може извести из уније и да ли уније могу изводити? - Не, не.
  15. Да ли конструктор може иницијализовати наслеђене атрибуте? - Може, користећи конструктор основне класе, али експлицитна иницијализација наслеђених атрибута није дозвољена.
  16. Да ли је објекат изведене класе увек и објекат основне класе? - Јесте уколико је класа јавно изведена из основне. Није објекат основне класе, уколико је изведена класа приватно или заштићено изведена из основне.
  17. Да ли се виртуелност функције наслеђује, тј. да ли се у изведеним класама мора навести да је функција виртуелна? - Не мора.
  18. У којим стварима се потпис методе у изведеној класи сме разликовати од потписа виртуелне методе у основној класи, шта се дешава ако се разликује више? - Ако је резултат виртуелне методе показивач/рефернца на основну класу, редефинисани метод сме да враћа и показивач/референцу на класу изведену из дате основне. Неслагање потписа истоименог метода резултира у сакривању метода. Уколико се потпис разликује само по типу резултата, осим у наведеном случају, дешава се грешка.
  19. Да ли се сваки виртуелни метод мора дефинисати у свакој изведеној класи и шта се дешава ако неки није написан? - Не мора се дефинисати у свакој изведеној класи, ако није написан важи наслеђени виртуални метод из основне класе.
  20. Када се активира виртуелни механизам, тј. како се објекту мора приступити? - Мора се приступити индиректно - преко референце или показивача.
  21. Која је сврха модификатора оверриде, да ли је то резервисана реч? - Експлицитно се указује да метод надјачава одговорајући виртуелни метод, није резервисана реч.
  22. Да ли се и оверриде и финал могу заједно наћи у потпису метода? - Могу.
  23. Шта класу чини полиморфном? - Класа је полиморфна уколико садржи барем једну виртуелну методу.
  24. Шта додатно садржи сваки објекат полиморфне класе? - Показивач на ТВФ (табелу виртуелних функција)
  25. Да ли статичке методе и глобалне пријатељске функције могу бити полиморфне, ако не могу како се онда постиже полиморфно понашање код њих? - Не могу. Статичке методе морају да позивају нестатички виртуелни метод за неки објекат дате класе, показивач/референца на објекат може да сепроследи као параметар. Проблем код глобалних пријатељских функција се решава на исти начин.
  26. Да ли конструктори и деструктори могу бити виртуелни и зашто? - Конструкор не може бити виртуалан јер се позива пре но што се објекат креира. Деструктор може бити виртуалан, тада се тек у време извршења одређује који се деструкор позива.
  27. Да ли изведена класа треба експлицитно позвати деструктор основне класе? - Не, јер се имплицитно позива конструктор основне класе.
  28. Да ли је низ објеката изведене класе једна врста низа објеката основне класе, да ли се могу безбедно конвертовати, да ли постоји случај кад може доћи до грешке и да ли преводилац то може открити? - Не, није. Безбедна конверзија, показивача/референце на објекат(е) изведене класе у основну, је могућа уколико је изведена класа јавно изведена из основне. Уколико је приватно изведена, показивач на објекат(е) такве класе може се имплицитно конвертовати само унутар изведене класе, у супротном настаје грешка, коју би преводилац требао да открије пре превођења.
  29. Да ли је дозвољена конверзија низа показивача на објекте изведене класе у низ показивача на објекте основне класе? - Јесте, само уколико је изведена класа јавно изведена из основне.
  30. Када је класа виртуелна, а када апстрактна? - Виртуелна је када су њени методи дефинисани, али се могу редефинисати у изведеним класама. Апстрактна је барем једна метода класе само декларисана, те се мора дефинисати у изведеној класе.
  31. Да ли је могуће имати примере апстрактне класе, а шта важи за показиваче и референце такве класе? - Није могуће инстанцирати апстрактну класу, али могу да постоје показивачи/референце на исту.
  32. Како је могуће спречити стварање објеката класе чије су сви методе конкретне и не-апстрактне? - Декларацијом апстрактног конструктора (virtual ~Klasa() = 0)
  33. Да ли класа може да има апстрактни деструктор без дефиниције? - Не, не може. Апстрактни деструктор мора бити дефинисан ван тела класе.
  34. Да ли класа изведена из апстрактне класе мора да дефинише све апстрактне методе и шта се дешава уколико их не дефинише? - Изведена класа не мора да дефинише све методе апстрактне класе, али тада је и она сама апстрактна.
  35. Да ли апстрактна класа може да има конструктор и како он ради? - Може, он се позива при конструкцији конкретних објеката, изведених из апстрактне класе.
  36. Каква мора да буде класа показивача/референце која се шаље као параметар оператору дyнамиц_цаст? - Класа мора бити полиморфна, у супротном се дешава грешка при превођењу.
  37. Шта се дешава уколико показивач/референца прослеђени оператору дyнамиц_цаст ипак не упућују на објекат изведене класе (или класе још изведеније из ње) у коју се врши конверзија? - Баца се изузетак бад_цаст, који је дефинисан у <тyпеинфо>.
  38. Да ли оператор тyпеид израчунава израз? - Не.
  39. Шта враћа оператор тyпеид кад је употребљен над објектом полиморфне класе (у облику референце или дереференцираног показивача), а шта над објектом не-полиморфне класе? - Резултат се односи на динамички тип операнда, у спортном се односи на статички. (слиде 52 у “Извођење” за пример како ово ради).
  40. Шта се дешава уколико се у изразу прослеђеном тyпеид оператору дереференцира нуллптр показивач? - Уколико показивач показује на полиморфну класу, баца се изузетак бад_тyпеид, иначе се резулат односи на статички тип показивача (X *п -> инфо за X).
  41. Који концепт уводи оператор тyпеид? - Интроспекцију/рефлексију, начин да програм сазнаје о себи.
  42. Који тип објекта враћа оператор тyпеид и да ли је могуће сачувати његов резултат у променљиву и зашто? - Тип објекта је тyпе_инфо, његов резултат се не може сачувати у променљиву јер класа тyпе_инфо нема јавне конструкторе.
  43. Шта је проблем дијамант структуре и како се решава? - Када су основне класе при вишеструком извођењу изведене из исте класе. Овај проблем се решава тако што се та иста класа декларише као виртуелна основна класа. (слиде 57 у “Извођење” за пример)
  44. Којим редоследом се извршава конструкција при вишеструком наслеђивању? - Прво се извршава конструкција свих основних класа, по редоследу декларације, потом конструкција атрибута изведене класе и на крају конструктор изведене класе.

Изузеци

  1. Ког типа може бити бачени изузетак? - Изузетак може бити објекат класе или неког другог типа.
  2. Да ли оператор noexcept израчунава израз и на који начин онда гледа тачност? - Израз се не израчунава, али се у току превођења проверава да ли се може десити изузетак израчунавајући исти. Уколико израз СИГУРНО не може изазвати изузетак, тада ноеxцепт оператор враћа труе, у супротном враћа фалсе.
  3. Којим редоследом треба наводити руковаоце? - Руковаоци типа изведеног из неке основне класе треба да се ставе испред руковаоца типа те основне класе, нуиверзални руковалац треба да се стави на последње место.
  4. Који је животни век баченог објекта? - Животни век баченог објекта изузетка је до краја последњег позваног руковаоца.
  5. Шта се дешава уколико је бачен локални објекат? - Изузетак ће бити његова копија.
  6. Шта се дешава са атрибутима класе уколико се деси изузетак у конструктору који пропагира ван конструктора? - Они се уништавају, укључујући и наслеђене подобјекте.
  7. Која је сврха функцијске наредбе try? - Користи се у декларацији функције како би се омогућило постављање руководилачких (catch) блокова заједно са самом декларацијом исте. Ово се убично користи када желимо да ухватимо изузетак који се може јавити приликом иницијализације објекта унутар тела функције.
  8. Да ли се у руковаоцима функцијске наредбе try могу користити параметри функције? - Да, могу.
  9. Шта морају да ураде руковаоци функцијске наредбе try на крају свог извршавања? - Уколико се не баца изузетак или функција није void, мора да се изврши return који враћа резултат истог типа као и сама функција.
  10. Да ли се треба приступати атрибутима и наслеђеном подобјекту унутар руковаоца функцијског try блока конструктора? - Не треба јер су последице непредвидиве (неки још нису иницијализовани, а оне класе, који су већ били конструисани одговарајући деструктор је уништио пре извршења руководиоца).
  11. Шта се дешава на крају руковаоца функцијског try блока конструктора? - Изазива ново бацање изузетака (као да је руководилац завршен наредбом throw;)
  12. Чему је еквивалентан модификатор noexcept? - ноеxцепт <=> ноеxцепт(труе) <=> тхроw()
  13. Да ли конструктор са функцијским try блоком сме имати noexcept? - Није.
  14. Шта се дешава уколико се за неки изузетак не пронађе руковалац? - Извршава се системска функција noreturn void terminate() noexcept .
  15. Шта подразумевано ради функција terminate() и да ли је то могуће променити, и уколико је могуће шта та алтернативна функција мора на крају да уради? - Подразумевано позива функцију abort(), која даје контролу оперативном систему. То је могуће променити помоћу функције set_terminate() којој, као аргумент, треба да се достави показивач на функцију коју terminate() треба да позове уместо abort().
  16. Шта се дешава уколико се у функцији деси неочекиван изузетак (у функцији означеној са noexcept или ако изузетак није на листи очекиваних изузетака)? - '
  17. Шта подразумевано ради функција terminate() и да ли је то могуће променити, и уколико је могуће шта та алтернативна функција мора на крају да уради? - '
  18. Да ли иједна метода класе изведене из std::exception сме да баци изузетак и зашто? - '

Шаблони

  1. Да ли је механизам генерика статички или динамички? - Механизам шаблона је статички (проверава се у време превођења).
  2. Да ли има смисла одвојено превођење шаблона, тј. писање истих у .cpp датотекама и која је мана тога? - Одвојено превођење шаблона нема смисла, мана тога је што корисник види целу имплементацију у .х фајлу, а не само уговор.
  3. Шта могу бити формални параметри шаблона? - Формални параметри шаблона (између <>) могу пити типови и константе.
  4. Како се на захтев генеришу конкретне функције и класе из шаблона? - Функције се генеришу навођењем декларације функције са аргументима шалона, док се класе генеришу на исти начин, навођењем аргумената шаблона у декларацији класе.
  5. Да ли се имплицитно могу генерисати конкретне функције и класе из шаблона и под којим условима? - Да могу, ово се односи на процес који се назива "имплицитна инстантијација шаблона". Компајлер може аутоматски генерисати конкретне имплементације шаблона када му буде потребна, на основу употребе шаблона у коду.
  6. Када је неопходно експлицитно навести стварне аргументе шаблона функције? - При генерисању на захтев.
  7. Када ће бити спречено аутоматско генерисање функције из шаблона, а како се може форсирати генерисање функције из шаблона? - Биће спречено ако се претходно појављује одговарајуће дефиниција обичне функције. Форсирање генерисања функције из шаблона се постиже експлицитним навођењем стварних аргумената шаблона.
  8. Да ли се при генерисању класе из шаблона генеришу и све њене виртуелне методе? - Да.
  9. Да ли се може именовати класа при генерисању из шаблона? - Може, користећи тyпедеф или усинг. typedef Vekt<char*, 100> VektorStr; using VektorRelanih = Vekt<float, 1000>
  10. Да ли аргументи шаблона могу да имају подразумеване вредности и шта се дешава при имплицитном закључивању код шаблонских функција? - Могу, при имплицитном закључивању се подразумевана вредност може одредити на основу стварних аргумената функције.
  11. Да ли се подразумеване вредности аргумената морају навести и приликом дефиниције сваког метода шаблонске класе или је довољно само једном приликом дефиниције/декларације класе? - Довољно је навести их само једном при дефиницији/декларацији класе. (слиде 14 у “Генерици)”
  12. Ако је формални параметар шаблона константа, ког типа мора да буде? - Константни целобројни израз.
  13. Из ког разлога су само константне дозвољене као параметри шаблона, а не и променљиве? - Унапређење перформансе извршавања (параметри се евалуирају током превођења), унапређење сигурности (статичка анализа током превођења).
  14. Да ли ранији формални параметри се могу користити за подразумеване/почетне вредности каснијих параметара шаблона? - Не могу, јер формални параметри не могу зависити једни од других, у смислу да се вредност једног параметра користи за одређивање подразумеване вредности другог параметра.
  15. Да ли функције могу бити параметри шаблона и ако не шта се у том случају ради? - Функције не могу бити параметри шаблона, решење је функцијска класа (класа за коју је дефинисан оператор())
  16. Какви су конструктори иницијализаторске листе? - Приватни, позива их само преводилац за стварање иницијализаторске листе на основну наведених података.
  17. Које јавне методе имају иницијализаторске листе? - size() (враћа број елемената листе) , begin() (враћа показивач на први непроменљиви елемент листе), end() (враћа показивач иза последњег елемента листе).
  18. Како пишемо конструктор класе ако желимо да објекат иницијализујемо иницијализаторском листом произвољне дужине? - Потребно је да класа има конструктор са параметром иницијализаторксе листе. Остали параметри тог конструктора морају имати подразумеване вредности.
  19. Да ли се аргументи конструктора могу навести помоћу инцијализаторске листе и која разлика постоји између тог начина и позива конструктора чији је параметар иницијализаторска листа? - Могу. Разлика је у томе што се на овај начин чланови могу навести у витичастим заградама и могу бити различитих типова.
  20. У ком случају се неће позвати конструктор који прима иницијализаторску листу, а објекат се иницијализује иницијализаторском листом? - У случају празног низа у {} заградама.
  21. Да ли параметри шаблона приликом специјализације могу имати подразумеване вредности? - Не могу.
  22. Која ограничења важе за специјализацију шаблона функције? - Могућа је само потпуна специјализација (специјализован шаблон нема ниједан параметар , тада на основу специјализације може да се генерише само једна функција).
  23. Када је специјализација могућа, а када престаје бити могућа? - Могућа је ако је претходно наведена барем декларација опште генеричке класе.
  24. Шта се дешава уколико имамо више подједнако специјализованих шаблона, како се одлучује који шаблон је најспецијализованији? - Бира се онај са најмање параметара, потом општи (ако ниједан одговара), у супротном јавља се грешка ако бише њих одговара.
  25. Да ли методе класе могу бити генеричке, да ли такве методе могу бити виртуелне и да ли могу бити дефинисане и ван класе? - Само невиртуелне методе могу бити генеричке и дефинисати се у класи или изван ње, било та класа генеричка или не.
  26. Да ли конструктори и деструктори могу да буду генерички (без обзира на то да ли је класа генеричка)? - Конструктори могу бити генерички, била њихова класа генеричка или не. Деструктори не могу бити генерички каква год да је класа.
  27. Како се позивају генерички методи, а како генерички конструктори? - Могу се позвати као и обичне методе/конструктори, уколико на основу аргументс истих могу да се одреде аргументи шаблона. Иза имена метода се могу навести аргументи шаблона између <>. Испред имена метода се може написати “темплате” (слиде 27 у “Генерици” за пример).
  28. Да ли угњеждене класе могу да буду генеричке и каква мора да буде спољашња класа? - Може, њена спољна класа може, а и не мора бити генеричка. У случају генеричке спољне, односно унутрашње, ознака обе класе мора да садржи и параметре шаблона.