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