ТЕСТ 3
въпросите на теста, един верен отговор (да), и един грешен
"отговор" (не)
Посочете верните твърдения за параметрите
на функциите, предефиниращи операции и за аргументите на самите
предефинирани операции.
(да) Първият на аргумент на предефинирана операция с член-функция е
текущият обект.
(не) Унарна операция се предефинира с член-функция с един
параметър.
Отбележете верни/неверни твърдения за
предефиниране на операции.
(да) Операция се предефинира като са дeфинира функция с име operator и знака на операцията.
(не) Функцията Time& operator++(Time&)
предефинира постфиксната операция ++ за обекти от клас Time.
Даден е класа:
class Btree{
public:
Btree();
Btree(const Btree& b);
~Btree();
Btree& operator=(const Btree&
b);
private:
...
};
и обект b от този клас.
Проверете твърденията за оператори от функция main:
(да) В оператора Btree b1(b); се
извиква конструктора за копиране.
(не) В оператора Btree b1 = b; се
извиква предефинираната операция присвояване.
Разгледайте главната функция на
програмата, дадена във файла overload.cpp
и отбележете с "да" изразите, в които има предефинирана операция.
(да) now + 1000
(не) cout << "Another "
Може ли даденият ред от програма да бъде
дефиниция на деструктор?
(да) Department::~Department() {}
(не) Dep::~Dep(int i) { cout << i; }
Възможно ли е да се предефинира следващата
операция за обекти от класа Time,
като използваме следната декларация на обикновена функция?
(не) bool operator>(Time);
(да) long operator-(Time, Time);
Възможно ли е да се предефинира следващата
операция за обекти от класа Time, като използваме следната
декларация на член-функция?
(да) bool Time::operator==(Time);
(не) istream& Time::operator>>(Time&);
Отбележете верни/неверни твърдения за
класове-шаблони.
(да) Клас-шаблон е механизъм, който позволява да се създават
класове, чиито членове-данни са от произволен тип.
(не) Член-функция на клас-шаблон може да се дефинира като обикновена
(не шаблон) функция.
Нека е даден следния клас-шаблон:
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
е бинарна операция.