2008 Вариант 3 (Коллоквиум. Варианты заданий и ответы)
Описание файла
Файл "2008 Вариант 3" внутри архива находится в папке "Коллоквиум. Варианты заданий и ответы". Документ из архива "Коллоквиум. Варианты заданий и ответы", который расположен в категории "". Всё это находится в предмете "практикум (прикладное программное обеспечение и системы программирования)" из 4 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Онлайн просмотр документа "2008 Вариант 3"
Текст из документа "2008 Вариант 3"
Вариант 3_2008 Ф.И.О.___________________________________№ группы________
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
1. Есть ли ошибки в реализации функций S::g() и main () ? Если есть, объясните, в чем они заключаются. Для всех правильных операторов этих функций укажите, из какой области видимости выбираются участвующие в их записи имена, используя операцию разрешения области видимости «:: ».
int x = 0;
void f (int a, int b){x = a+b;}
class T {
int x;
public:
void f (){x = 2;}
};
class S: public T {
public:
void f (int a){::x = a;}
void g ();
};
void S::g() {
f();
f(1);
f(-1 , 1);
x = 2;
}
int main () {
S b;
f(5);
f(‘+’, 6);
return 0;
}
2. Есть ли ошибки в приведенном фрагменте программы на С++? Если есть, то объясните, в чем они заключаются. Ошибочные конструкции вычеркнуть из текста программы. Что будет выдано в стандартный канал вывода при работе программы?
class K {
public: virtual int f (int x) { cout << "K::f" << endl; return 0; }
void g () { f (1); cout << "K::g" << endl; }
virtual void h () { g (); cout << "K::h" << endl; }
};
class P: public K {
public: int f (double y) { cout << "P::f" << endl; return 2; }
virtual void g () { f (1); cout << "P::g" << endl; } virtual void h () { g(); cout << "P::h" << endl; }
};
int main( ){
K k; P p; K *t = &p;
t -> f (0.7);
t -> g ();
t -> h ();
}
3. Является ли тип данных T из задания 1. абстрактным типом данных (пояснить ответ)? Перегрузить для этого класса префиксную операцию ++ в соответствии с принятым для нее в С++ смыслом.
4. Для объектов класса S из задания 1. определена функция rt2:
S rt2 (S & a, S & b) { return b; }
Какие конструкторы и деструкторы и в каком порядке будут вызываться при работе следующего фрагмента программы
... ; { S ob; ob = rt2 (ob, ob); } ...
5. Описать прототипы двух перегруженных функций h из некоторой области видимости, для которых будут верны следующие обращения к ним:
h (“333”);
h ( );
h (-7);
h (5.5f, 3);
6. Дать определение абстрактного класса в С++. Привести пример. Можно ли описывать конструкторы, вводить неконстантные члены-данные, заводить объекты абстрактного класса?
7. Что будет выдано в стандартный канал вывода при работе следующей программы?
class X;
void F(X & x, int n);
class X {
public: X() { try { F(*this, -2); cout << 1 << endl; }
catch (X) { cout << 2 << endl; }
catch (int) { cout << 3 << endl; } }
X (X &) { cout << 12 << endl; }
};
class Y: public X {
public: Y () {cout << 4 << endl;}
Y (Y & a) {cout << 5 << endl;}
~Y () {cout << 6 << endl;}
};
void F(X & x, int n) { try { if (n < 0) throw x;
if (n > 10) throw 1;
cout << 7 << endl; }
catch (int) { cout << 8 << endl; }
catch (X&) { cout << 9 << endl; throw; }
}
int main() { try { Y a; }
catch (...) { cout << 10 << endl; }
cout << 11 << endl;
}
-
Есть ли ошибки в тексте приведенной программы? Можно ли исправить описание класса, не вводя дополнительных членов, чтобы программа стала верной? Если да, то как?
class X {
public:
void g () {cout << "g\n";}
int h (int n) {cout << "f\n"; return n}
};
int main () {
int k;
const X x;
X::g();
k = x.h(5);
return 0;
}
9. Дать определение функции – друга класса. Привести пример класса, имеющего друга, описание этого друга, и пример его использования.
10. STL: Написать функцию, которая удаляет каждый второй элемент заданного контейнера-вектора v <char>, а затем распечатывает его элементы в обратном порядке.