Ответы 2011 вариант 1 (1119611)
Текст из файла
Ответы_Вариант 1_2011
1. Ответ: x = c.C::g (& c);
x = c.A::f ();
x = c.A::f (x); // x = c.B::f (x);
x = c.C::f (x, 1); x = p -> A::f ();
x = p -> A::f (x); x = p -> A::f (x, 1);
Ошибочны 2 оператора, которые можно исправить (подчеркунуты).
Критерии: За пропуск ошибки (из 2-х): -4. За каждое не отмеченное или неверное уточнение области видимости (из 7): -1. За каждую лишнюю обнаруженную "ошибку" -4.
2. Ответ: Ошибочными являются указания на то, что статические методы f() вызывают нестатические методы. Надо исключить в методах f() вызовы методов h():
B::f,0 A::f,1 A::g A::g A::h,2 A::f,3
Критерии: За каждую не найденную ошибку, лишнюю ошибку или неправильно вызванную функцию – 2.
3. Ответ: f (); // f (int), (а) на этапе выбора функций,
подходящих по кол-ву параметров;
за ответ «точное отождествление»
не наказывать
f (s); // f (int), (б) целочисленное расширение
f (f); // f (double), (б) вещественное расширение
f (b); // f (int), (б) целочисленное расширение
f (A); // f (int), (б) целочисленное расширение
Критерии: За каждую ошибку –2.
4. Ответ: A(),B(),C(),A(const A&),A(),B(),D(),~D(),~B(),~A(),~A(),~C(),~B(),~A().
Критерии: За каждую ошибку –2.
5. Ответ: template<class T> class ObjPtr { /* ... */ cl<T> * c; public: /* ... */
const ObjPtr<T> operator+ (const ObjPtr<T> & s) const
{ ObjPtr<T> v; v.c = new cl<T>; * v.c = * c + * s.c; return v; }
const ObjPtr<T> operator+ (const T & s)
{ ObjPtr<T> v; v.c = new cl<T>; * v.c = * c + s; return v; }
friend const ObjPtr<T> operator+ (const T & s, const ObjPtr<T> & t);
};
template<class T> const ObjPtr<T> operator+ (const T &s, const ObjPtr<T> &t)
{ ObjPtr<T> v; v.c = new cl<T>; * v.c = * t.c + s; return v; }
Критерий: За отсутствие каждого примера (из 3-х) или ошибки в нем: -4. За отсутствие реализаций методами класса (из 2-х) при правильной реализации этих же операций функциями-друзьями: -2.
6. Ответ: 1. Виртуальный базовый класс – это такой базовый класс, который представляется в своих производных классах одним и тем же совместно используемым объектом. В варианте наследования (множественного) с использованием виртуальных базовых классов одинаковые части нескольких базовых классов включаются в их общий производный класс в единственном экземпляре. Виртуальное наследование позволяет избавиться от неоднозначности, которое при множественном наследовании возникает из-за наследования одного базового класса несколькими классами промежуточных наследственных уровней (как при ромбовидном наследовании).
2. Пример виртуального наследования (без виртуальности обращения к полю “n” из функции “f()” создают неоднозначность), где виртуальным базовым классом является класс “L”:
class L { public int n; ... };
class A: virtual public L { ... };
class B: virtual public L { ... };
class C: public A, protected B { ... void f (); ... };
Критерий: За неверный ответ: -5. За отсутствие пояснения: -4.. За отсутствие примера: -4.
7. Ответ: l a d e m e
Критерии: За каждую неверную (лишнюю или пропущенную) печать -2.
8. Ответ: 1. Требуется уточнить обращения к полю “m” с помощью операций разрешения области видимости “::” для класса “B” либо для “С” , например, так:
fA.C::m = 0; return *((* f).e = & fA.C::m);
Либо во всех описания производных классов вставить указание виртуального наследования (всего 4 поправки, из которых исправления в классах “B” и “С” при таком подходе – обязательны):
class B: virtual public A { public: int * p; };
class C: virtual public A { public: int * c; };
3. Других ошибок нет.
Критерий: За пропуск любой из трёх ошибок или неправильное исправление: -4. За указание ошибки там, где ее нет: -5. Отсутствие указаний виртуальности наследования в классе “D” при наличии таких исправлений в классах “B” и “С” не наказывать.
9. Ответ: К пользовательским преобразованиям относятся преобразования, выполняемые:
-
с помощью конструкторов преобразования (то есть конструкторов с одним параметром);
-
с помощью функций преобразования – методов класса с профилем “operator <тип>()”, которые преобразуют объект класса к типу <тип>:
Ограничения:
-
Пользовательские преобразования применяются неявно только в том случае, если они однозначны.
-
Допускается не более одного пользовательского преобразования для обработки одного вызова для одного параметра.
-
Конструктор должен иметь разрешение быть вызванным неявно (у него должен отсутствовать спецификатор explicit).
struct S { S (long); operator int (); };
void f (long); void f (char*);
void g (S); void g (char*);
void h (const S&); void h (char*);
void ex (S &a) { f (a); // f ((long) (a.operator int()));
g (1); // g (S ((long) (1)));
h (1); // h (S ((long) (1)));
}
Критерий: За пропуск какого-либо преобразования или ограничения (из 5): -2. За пропуск примера какой-либо операции: -4.
10. Ответ:
typedef list<int> L;
typedef vector<L::value_type *> V;
L::size_type g (V & vect, L & lst)
{ L:: size_type count = 0;
L:: reverse_iterator lp = lst.rbegin ();
for (V:: size_type i = 0; i < vect.size () && lp != lst.rend (); ++ i, ++ lp)
{ L::value_type t = * lp;
* lp = * vect [i];
* vect [i] = t;
++ count;
}
L:: iterator lq = lst.begin ();
while (lq != lst.end ()) {
cout << * lq;
++ lq;
}
for (V::size_type i = 0; i < vect.size (); ++ i)
cout << * vect [i];
return count;
}
КРИТЕРИИ: За каждую существенную ошибку: -3. Отсутствие ссылки в списке формальных параметров - -3. Если вместо индексации использованы указатели, но программа правильная – не снижать. Использование вместо типа size_type типа int - не наказывать.
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.