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