ОО1/Јануар 2022

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу
  • За питања са више одговора, тачни одговори су подебљани и уоквирени
  • За питања за које се одговори уносе, тачни одговори су подвучени и сакривени, тако да се прикажу када изаберете тај текст (пример: овако)
  • Притисните лево дугме испод за сакривање и откривање свих одговора, или десно дугме за укључивање и искључивање интерактивног режима:

Г1

1. задатак

Шта је тачно за наведени исечак кода на језику C++?

#include <iostream>

using namespace std;

int main() {
	int niz[] = { 1, 2, 3 };
	int i;
	cin >> i;
	cout << niz[i];
}
  1. Постоји проблем цурења меморије.
  2. Низ има тачно 3 елемената.
  3. Постоји проблем са висећим показивачем.
  4. Ако се на стандардни улаз упише 1, програм ће исписати 1.

2. задатак

Шта је могуће ставити уместо ??? на овом исечку кода на језику C++?

#include <iostream>
using namespace std;

int main() {
	char slova[] = "slova";
	char* const pk = slova;
    ???
}
  1. pk++;
  2. (*pk)++;
  3. pk = "xyz";
  4. char c = pk[1];
  5. pk[0] = 'a';

Објашњење: pk је константни показивач на цхар што значи да не може да се промени на шта он показује, тако да су први и трећи одговори нетачни. Други и пети одговори су тачни јер је само показивач константан, а не променљива на коју показује.

3. задатак

Шта је могуће ставити уместо ??? на овом исечку кода на језику C++?

#include <iostream>
using namespace std;

class X {
	int a;
public:
	static int y;
	int b;
private:
	static int x;
};

int X::y = 1;
int X::x = 2;

int main() {
	X obj;
    ???
}
  1. obj.a = 5;
  2. obj.b = 5;
  3. obj.y = 5;
  4. obj.x = 5;
  5. X::y = 5;

4. задатак

Шта исписује следећи код на програмском језику C++?

#include <iostream>
using namespace std;

class X {
public:
	static X&& kreiraj() { X* pk = new X(); return static_cast<X&&>(*pk); }
	void metod()& { cout << 1; }
	void metod()&& { cout << 2; }
};

int main() {
	X x;
	x.metod();
	X::kreiraj().metod();
}
  1. Програм се не преводи.
  2. 1
  3. 11
  4. 12
  5. 21

5. задатак

Шта исписује следећи код на програмском језику C++?

#include <iostream>

using namespace std;

class A {
public:
	A() { cout << "0"; }
};

class B{
	A a;
public:
	B() { cout << "1"; }
};

class C : public B {
	A a;
public:
	C() { cout << "2"; }
};

int main() {
	C c;
}
  1. Програм се не преводи.
  2. 0120
  3. 0102
  4. Ниједан од понуђених одговора.

6. задатак

Шта је тачно од следећих навода о преклапању оператора на језику C++?

  1. Ако се преклопи оператор new губи се подразумевани конструктор.
  2. Када се преклапа (), оператор може да прими произвољно параметара али сви морају да буду стандардног типа.
  3. Функцијска класа је класа која преклапа барем један од оператора () [] ->.
  4. Класа може имати више преклопњених new оператора.
  5. new оператор се преклапа као статички метод.

7. задатак

Шта је тачно од следећих навода о апстрактним класама на језику C++?

  1. Апстрактна класа је она која има барем једну апстрактну методу.
  2. Статички метод може да буде апстрактан.
  3. Класа може бити апстрактна ако су јој деструктор и све методе конкретне.
  4. Да би изведена класа била конкретна, мора да конкретизује све апстрактне методе.
  5. Апстрактна класа се означава са abstract у дефиницији пре class.

8. задатак

Шта је тачно од следећих навода о шаблонским класама на језику C++?

  1. Може се изводити из шаблонских класа.
  2. Шаблонска класа не може имати виртуелне методе.
  3. Шаблонски методи не могу бити виртуелни.
  4. ??
  5. ??

9. задатак

Шта је тачно од следећих навода о виртуелним методама на језику C++?

  1. Деструктор може да буде виртуелан.
  2. Конструктор може да буде виртуелан.
  3. Статички метод може да буде виртуелан.
  4. Пријатељска глобална функција може бити виртуелна.
  5. Нестатички метод може да буде виртуелан.

10. задатак

Шта је тачно од следећих навода о руковаоцима изузетака на језику C++?

  1. Руковалац типа double може да прихвати изузетке типа int.
  2. Руковалац типа ... прихвата све типове изузетака.
  3. Руковалац типа int може да прихвати изузетке типа double.
  4. Изузетак може да се баци из try блока.
  5. Изузетак не може да се баци из catch блока.

Г3

1. задатак

Шта исписује следећи сегмент кода написан на програмском језику C++?

#include <iostream>
using namespace std;

int i = 7;
int main() {
	for(int i = 0; i < 3; i++) {
		if(int i = 1) {
			cout << i;
		}
	}
    cout << i;
    return 0;
}

Одговор: 1117

2. задатак

Шта може да стоје уместо #### да би се код написан на језику C++ успешно превео?

#include <iostream>

int main() {
	int a = 1, b = 2;
    int * const p = &a;
    ####
}

Изаберите један или више одговора:

  1. p++;
  2. *p = 1;
  3. p = &b;
  4. std::cout << p;
  5. std::cout << *p;

3. задатак

Шта исписује следећи програм написан на језику C++?

#include <iostream>
using namespace std;

class Klasa {
public:
	void metoda() & { cout << "1"; }
	void metoda() && { cout << "2"; }
};

int main(){
	Klasa &&dRef = Klasa();
	dRef.metoda();
	return 0;
}

Одговор: 1

4. задатак

Уколико су дате следеће датотеке "X.х" и "маин.цпп":

// datoteka X.h
class X {
	int a;
private:
	static int b;
public:
	static int c;
	int d;
};
// datoteka main.cpp
#include "X.h"

int X::b = 1;
int X::c = 1;

int main() {
	X y;
    ***
}

која од ових наведених наредби исправно замењује ***? Изаберите један или више одговора:

  1. y.b = 2;
  2. X::c = 5;
  3. y.a = 1;
  4. X::d = 3;
  5. y.d = 4;

5. задатак

Шта од следећег важи за преклапање оператора на програмском језику C++?

Изаберите један или више одговора:

  1. Уколико је леви операнд бинарне операције стандардног типа мора се преклопити као метод одговарајуће класе.
  2. Оператор [] се мора преклопити као глобална пријатељска функција.
  3. Оператор доделе се мора преклопити као нестатички метод класе.
  4. Оператор () се мора преклопити као нестатички метод класе.
  5. Бинарни оператор + је могуће преклопити и као метод класе и као глобалну пријатељску функцију.

6. задатак

Шта од следећег важи за извођење на програмском језику C++?

Изаберите један или више одговора:

  1. Објекти изведене класе садрже безимени подобјекат основне класе.
  2. Преко објеката изведене класе заштићеним члановима основне класе се приступа исто као јавним члановима изведене класе.
  3. Језици који подржавају извођење се називају објектно базирани језици.
  4. Модификатор final се користи за класу која није изведена ни из једне класе.
  5. Када се нека класа изведе из класе X, потребно је извршити поновно превођење класе X.

7. задатак

Шта исписује следећи програм?

#include <iostream>
using namespace std;

class B {
public:
	B() { std::cout << "b"; }
};

class X : virtual public B {
public:
	X() { std::cout << "x"; }
};

class Y : virtual public B {
public:
	Y() { std::cout << "y"; }
};

class Z : public X, public Y {
public:
	Z() { std::cout << "z"; }
};

int main() {
	Z z;
}

Изаберите један одговор:

  1. бxyз
  2. бxбyз
  3. бyxз
  4. бyбxз
  5. Програм се не преводи.

8. задатак

Које тврдње у вези оператора за динамичку конверзију (dynamic_cast) су тачне?

Изаберите један или више одговора:

  1. Оператор за динамичку конверзију примењен на референцу типа основне класе при неуспешној конверзији у референцу на изведену класу баца изузетак типа bad_cast.
  2. Оператор за динамичку конверзију се мора примењивати за сваку конверзију навише (upcast) која се врши у време извршења програма.
  3. Оператор за динамичку конверзију се може применити на показивач или референцу на објекат неполиморфне основне класе.
  4. Оператор за динамичку конверзију примењен на показивач типа основне класе враћа nullptr ако конверзија у показивач типа изведене класе не успева.
  5. Оператор за динамичку конверзију гарантује да ће се конверзија у време извршења правилно извршити и да ће објекат бити конвертован у циљни објекат.

9. задатак

Ако су I1, I2, I3 и I4 класе изузетака и ако је у основној класи A декларисан метод:

virtual void m() throw (I1, I2, I3):

декларација метода m() у изведеној класи B може да буде:

Изаберите један или више одговора:

  1. void m() noexcept:
  2. void m() throw ():
  3. void m() throw (I1, I2, I3):
  4. void m() throw (I1):
  5. void m() throw (I2, I4):

10. задатак

Ако је генеричка класа дефинисана на следећи начин:

template <class T> class K { void m(T t); };

метод m може да буде дефинисан изван класе K на следећи начин:

Изаберите један одговор:

  1. void K::m(T t) { ... }
  2. template <class T> void K<T>::m(T t) { ... }
  3. void K<T>::m(T t) { ... }