1. Напишите(и объясните ответ), что будет выдано в стандартный канал вывода при выполнении вызова функции Q в следующем фрагменте программы : class X { public : int i; X(int j = 2) { i = j; }; void P() { cout << i; }; }; class Y : public X { int i; public : virtual void P() { X::P(); cout << i; }; Y(int j) { i = j+1; }; }; X * a; Y * b; void Q() { a = new X(1); b = new Y(1); b->P(); a = b; a->P(); } 2. Дайте определение и пример процедуры, динамически привязанной к типу, в языке Оберон-2. 3. Напишите на языке Ада спецификацию пакета, эквивалентную приведенному ниже описанию класса на языке Си++. template class STACK { public : STACK(); ~STACK(); int Push(const T&); int Pop (T&); int Empty(); int Full(); protected : T body[size]; int top; }; 4. Какие типы модулей есть в языке Модула-2? Какие модули Модулы-2 могут быть единицами компиляции? 5. Дайте определение и пример динамического массива в языке Ада. 6. Напишите (и объясните ответ), что будет выдано в стандартный канал вывода при выполнении вызова функции Q в следующем фрагменте программы : int i = 0; class STRING { char * cp; public : STRING (const char * s){ cp = new char [strlen (s) + 1];strcpy (cp, s);}; STRING (STRING& s){ cp = new char [strlen (s.cp) + 1];strcpy (cp, s.cp);}; STRING (const STRING& s1, const STRING& s2){ cp = new char [strlen (s1.cp) + strlen (s2.cp) + 1]; strcat (strcpy (cp, s1.cp), s2.cp); }; ~STRING () { i++; delete [] cp; }; operator char * () { return cp; }; void out () { cout << cp << '\n'; } }; void f(STRING s) { s.out();} void q() { char * p = "string1"; STRING s("string2", "string3"); f (p); f (s); } void Q(){ q(); cout << i; } 7. Какие типы конструкторов есть в языке Си++? 8. Что будет выдано в стандартный канал вывода (процедурой PUT) в результате вызова процедуры P? Объясните ответ. E1, E2 : EXCEPTION; PROCEDURE P1 (i : in INTEGER) IS BEGIN IF i = 1 THEN RAISE E1; END IF; IF i = 2 THEN RAISE E2; END IF; PUT ("P1-Finish"); EXCEPTION WHEN E2 => PUT ("Catch1"); RAISE; WHEN E1 => PUT ("Catch2"); END P1; PROCEDURE P2 IS BEGIN P1 (2); PUT ("P2-Finish"); EXCEPTION WHEN E1 => PUT ("Catch3"); WHEN E2 => PUT ("Catch4"); END P2; PROCEDURE P IS E1, E2 : EXCEPTION; PROCEDURE P2 IS BEGIN P1 (2); PUT ("Finish-P2"); EXCEPTION WHEN E1 => PUT ("Catch5"); WHEN E2 => PUT ("Catch6"); END P2; BEGIN P1 (1); P2; P1 (2); PUT ("Finish"); EXCEPTION WHEN E1 => PUT ("Catch7"); WHEN E2 => PUT ("Catch8"); WHEN OTHERS => PUT ("Catch9"); END P;