ТЕСТ 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; }
Разгледайте файла list1.cpp и отбележете верни и неверни твърдения за промяна на оператори.
(да) Предефирне на операция ++ за итератори с член-функция без аргументи ще предизвика синтактична грешка.
(не) Заместване на оператора pos = staff.begin(); с pos = staff.end(); ще генерира синтактична грешка.
Даден е клас-шаблон:
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 показва, че изпълнението на
функциятя спира незабавно и се изпълняват оператори извикващата
функция.
Дадена е следната част от програма:
class RTE : public runtime_error {
public:
RTE(const char r[]);
};
RTE::RTE(const char r[]): runtime_error(r){}
void fun3()
{ throw RTE("RTE" );
}
void fun2()
{ } // блок на
функцията fun2
void fun1() throw(RTE)
{ fun2(); }
int main()
{ try
{
fun1(); }
catch (RTE)
{ cout <<
e.what() << endl; }
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 any(Vec& w);
void some(Vec& w);
void f(Vec& v)
{
any(v);
try
{
some(v);
}
catch(Vec::Range r)
{
cerr << "ERROR" <<
r.index;
...
}
...
}
Верни ли са следните твърдения?
(да) r е обект от тип Vec::Range.
(не) r е обект от тип Range.
Посочете верните твърдения за
многократна и виртуална наследственост.
(да) Многократна наследственост има, когато производния клас има
два или повече базови класове.
(не) virtual class E : public P
определя виртуална наследственост.
Посочете верните твърдения за получаване
на информация за типа по време на изпълнение.
(да) Унарната операция dynamic_cast
изисква тип като параметър на шаблон, и аргумент, който трябва да
бъде указател или псевдоним (референция).
(не) typeid
е бинарна операция.