ТЕСТ 3
въпросите на теста, един верен отговор (да), и един грешен
"отговор" (не)
Отбележете верни/грешни твърдения от
текста на програмата за реализация на двусвързан списък от файл list1.cpp.
(да)
Конструкторът по подразбиране (без параметри) на класа List<T> конструира празен свързан
списък.
(не) Деструкторът на класа List<T>
се извиква автоматично във функцията erase.
Може ли в текста на програмата, дадена във
файла inh_t.cpp да се добави
следната дефиниция на нов клас?
(да)
class Boo : public A<int> {...};
(не)
class Bee : public A<T> {...};
Управлението на паметта е важна част от
ООП. Нека даден клас използва динамична памет. Вярно ли е, че:
(да)
Почленната операция присвояване (между обекти от този клас) води до
загуба на памет (memory leak).
(не)
Управлението на паметта се отнася и за системния стек.
Има ли синтактична грешка даденият оператор?
(да)
if(catch > 2) do = 2;
(не) class B;
Дефиниран е класа:
class Btree{
public:
Btree();
Btree(const Btree& b);
~Btree();
Btree& operator=(const Btree&
b);
private:
...
};
и обект b от този клас. Проверете
твърденията за оператори от функция main:
(да) В оператора Btree b1(b); се
извиква конструктора за копиране.
(не) В оператора Btree b1 = b; се
извиква предефинираната операция присвояване.
Може ли даденият ред от програма да бъде
дефиниция на деструктор?
(да) Department::~Department() {}
(не) Dep::~Dep(int i) { cout << i; }
Даден е клас-шаблон:
template<typename T, int R, int C>
class Matrix {
public:
Matrix();
private:
T* data[R][C];
};
Определете верни или неверни са дефинициите на обекти от този клас:
(да) Matrix<int, 2, 2> m;
(не) Matrix mm;
Отбележете верни/неверни твърдения за
класове-шаблони.
(да) Клас-шаблон е механизъм, който позволява да се създават
класове, чиито членове-данни са от произволен тип.
(не) Член-функция на клас-шаблон може да се дефинира като обикновена
(не шаблон) функция.
Нека е даден следния клас-шаблон:
template <typename T>
class Temp {
public:
Temp(T t)
{
data = new T(t);
}
private:
T* data;
};
Може ли в класа да се добави деклaрация или дефиниция на следната
функция:
(да) T get() const { return *data; }
(не) Temp go();
Даден е клас-шаблон A
и вложен в него клас B.
template <typename T>
class А {
public:
class B;
...
};
Верни ли са твърденията:
(да) Дефиниция на обект b от клас
B главната функция може да бъде A::B b.
(не) Дефиниция на обект b от клас
B главната функция може да бъде B b.
Отбележете верни/неверни твърдения за
обработка на изключения.
(да) Когато дадена функция открие грешка, тя може да изхвърли
изключение към някоя друга част на програмата, чиято задача е да
обработва грешки.
(не) Ключовата дума throw показва, че изпълнението на
функциятя спира незабавно и се изпълняват оператори извикващата
функция.
Дадена е следната част от програма:
void fun3()
{
throw runtime_error("RTE" );
}
void fun2() throw(runtime_error)
{
// блок на функцията
}
void fun1() throw(runtime_error)
{
fun2();
}
int main()
{
try
{
fun1();
}
catch (runtime_error e)
{
cout<<e.what();
}
return 0;
}
Поставете в блока на функцията fun2 дадения оператор или
дадените оператори и отбележете с "да" случая на отпечатване на
съобщение RTE при изпълнението на програмата.
(да) fun3();
(не) fun1();
Дадена е част от програма:
class Vec {
public:
class Range {
public:
int index;
Range(int j):index(j) {}
};
int& operator[](int i)
{
if (0<=i &&
i<100) return p[i];
throw Range(i);
}
...
};
void do_any(Vec& w);
void do_some(Vec& w);
void f(Vec& v)
{
do_any(v);
try
{
do_some(v);
}
catch(Vec::Range r)
{
cerr << "ERROR" <<
r.index;
...
}
...
}
Верни ли са следните твърдения?
(да) r е обект от тип Vec::Range.
(не) r е обект от тип Range.
Посочете верните твърдения за
многократна и виртуална наследственост.
(да) Многократна наследственост има, когато производния клас има
два или повече базови класове.
(не) virtual class E : public P
определя виртуална наследственост.
Посочете верните твърдения за получаване
на информация за типа по време на изпълнение.
(да) Унарната операция dynamic_cast
изисква тип като параметър на шаблон, и аргумент, който трябва да
бъде указател или псевдоним (референция).
(не) typeid
е бинарна операция.