ОО1/К1 2023
Први колоквијум, сколска 2023/2024 година. Одржан је 02.11.2023. и трајао је 20 минута.
- За питања са више одговора, тачни одговори су подебљани и уоквирени
- За питања за које се одговори уносе, тачни одговори су подвучени и сакривени, тако да се прикажу када изаберете тај текст (пример: овако)
- Притисните лево дугме испод за сакривање и откривање свих одговора, или десно дугме за укључивање и искључивање интерактивног режима:
1. задатак
Повезати основне концепте објектно оријентисаног програмирања с једним од понуђених описа који најбоље одговара концепту Овако изгледају задаци са одговорима понуђеним у падајућем менију.
- Полиморфирзам Понашање објекта не зависи само од типа показивача (упућивача) који показује на објекат већ од типа показиваног (упућиваног) објекта који је познат у време извршења
- Апстракција Препознавање битних својстава скупова сличних објеката уз занемаривање небитних детаља и представљање заједничком класом
- Капсулација Сакривање имплементације (репрезентације стања и реализације понашања) уз објављивање интерфејса кроз споља доступне декларације метода
- Наслеђивање Увођење новог типа података (класе) на основу постојећег са знаћењем да су примерци новог типа специјална врста примерака постојећег типа
2. задатак
Које тврдње везане за програмски језик C++ су тачне?
- Глобално име не може да се дефиниште унутар фунцкије, али може унутар класе
- У једној датотеци с изворним кодом може да постоји глобална променљива која има исто име као локална променљива
- Локално име има досег од места декларације или дефиниције до краја блока у коме је дата декларација или дефиниција
- Унутар тела функције ф1 може да се приступи локалној променљивој а која је дефинисана у телу друге функције ф2 коришћењем унарног оператора :: испред имена те локалне променљиве (::а)
- Унутар тела функције постоји начин да се приступи глобалној променљивој иако је у телу фунцкије декларисана локална променљива с истим именом
3. задатак
Које од следећих тврдњи су тачне за програмски језик C++?
Изаберите један или више одговора
- Уколико применом оператора неw додела меморије не успе, грешка се подразумевано пријављује изузетком бад_аллоц
- Оператор делете мења вредност показивача операнда
- Примена оператора делете не враћа никакав резултат (тип резултата је воид)
- тип резултата оператора неw је воид *
- примена оператора делете над операндом типа показивача који има вредност нуллптр има недефинисано понашање
4. задатак
Шта исписује следећи програм на језику C++?
Напомена: Уколико сматрате да се програм не преводи, уписати НП. Уколико сматрате да се дешава грешка у извршавању уписати Г.
#include <iostream>
using namespace std;
int main() {
int a = 5;
int b = 2;
int &c = a;
c++;
c = b;
c++
cout << a << b << c;
return 0;
}
Одговор: 323 Објашњење: Наредбом инт &ц = а смо референцу ц трајно везали за променљиву а. Свака операција над ц ће од тог тренутка бити операција над а, и обрнуто. Зато ц = б не мења на шта упућује ц него вредност б додељује ц (самим тим и а)
5. задатак
Како може бити дефинисана функција ф да би се дати програмски код на језику C++ успешно преводио?
int main() {
int i = 3;
const int &ri = i;
f(ri);
return 0;
}
воид ф(инт и) {}
воид ф(инт &&и) {}
воид ф(цонст инт &&и) {}
воид ф(цонст инт &и) {}
воид ф(инт &и) {}
6. задатак
Шта исписује следећи програм на језику C++?
#include <iostream>
class X {
public:
int m() {
static int i = 0;
return ++i;
}
};
int main() {
X x1, x2;
std::cout << x1.m() << x1.m() << x2.m() << std::endl;
}
Одговор: 123 Објашњење: Не постоји посебне "верзије" метода за сваки објекат, већ је метод једна јединствена функција за читаву класу. Зато је статичка променљива и јединствена за све позиве метода м()
7. задатак
За наведене методе класе Класа навести оне у којима је показивач тхис типа цонст Класа * цонст
воид м(цонст Класа*) цонст;
воид м(цонст Класа*);
воид м(Класа*) цонст;
воид м(Класа*);
воид м() цонст;
Објашњење: Показивач тхис је увек типа Класа * цонст јер се не може мењати адреса на коју показује. Уколико је метод обележен квалификатором цонст, то значи да се у том методу објекат позивалац не мења што тхис чини цонст Класа * цонст. Сви аргументи метода су небитни за тхис
8. задатак
Шта исписује следећи програм на језику C++?
Напомена: Уколико сматрате да се програм не преводи, уписати НП. Уколико сматрате да се дешава грешка у извршавању уписати Г.
#include <iostream>
class A {
int a;
public:
A(int b = 2) : a(b) {std::cout << a;}
};
int main() {
A niz[3];
niz[1] = A(5);
return 0;
}
Одговор: 2225 Објашњење: Приликом иницијализаије низа имплицитно се позива но-арг конструктор који иницијализује А::а на 2 и исписује га. А(5) затим позива конверзиони констркутор који А::а додељује вредност 5 и исписује је.
9. задатак
Које од тврдње су тачне за језик C++?
Изаберите један или више одговора:
- Да би пријатељска глобална функција приступала приватним члановима класе којој је пријатељ, њена декларација или дефиниција мора да буде наведена у приватној секцији те класе
- Функција може да буде пријатељска само једној класи
- Пријатељска фунцкија мора да буде дефинисана у телу класе којој је пријатељ
- Пријатељска функција може да приступа приватним методима класе којој је пријатељ
- Глобална пријатељска функција не може да користи показивач тхис на објекат класе којој је пријатељ
10. задатак
Која од дефиниција функција може да се појави на месту *** у следећем сегменту кода на језику C++ (предпоставити да је функција г() исправно дефинисана у другој датотеци)
int x;
void f() {
static int s;
int x;
extern int g();
class L {
public:
***
};
}
L(инт &x) {x = 1;};
инт л() {ретурн г();}
инт х() {ретурн x;}
инт ј() {ретурн с;}
инт к() {ретурн ::x;}