ТЕСТ 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 е бинарна операция.