2012 Вариант 2 (Коллоквиум. Варианты заданий и ответы)
Описание файла
Файл "2012 Вариант 2" внутри архива находится в папке "Коллоквиум. Варианты заданий и ответы". Документ из архива "Коллоквиум. Варианты заданий и ответы", который расположен в категории "". Всё это находится в предмете "практикум (прикладное программное обеспечение и системы программирования)" из 4 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Онлайн просмотр документа "2012 Вариант 2"
Текст из документа "2012 Вариант 2"
Вариант 2 _2012 Ф.И.О.___________________________________№ группы________
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
Во всех заданиях считать, что там, где это необходимо, произведены нужные включения и использован оператор using namespace std;
1. Какие способы наследования базового класса производным классом приняты в С++? В чем отличие статуса private и public членов базового класса в производном классе при private наследовании?
2. Описать класс B т.о., чтобы: - все конструкции функции main ( ) были верными,
- класс B содержал только один явно описанный конструктор,
- на экран выдалось 17 11 6.
Нельзя использовать исключения и любые функции досрочного завершения программы.
int main () {
B b1 (1), b2 (2, 3), b3 (b1);
b1 += b2 += b3;
cout << b1.get() << ‘ ‘ << b2.get() << ‘ ‘ << b3.get () << endl;
return 0;
}
3. Что будет выдано на печать при работе следующей программы?
#include <iostream>
struct S {
int x;
S (int n) { x = n; printf (" Cons "); }
S (const S & a) { x = a.x; printf (" Copy "); }
~S ( ) { printf ("Des "); }
};
S f ( S & y ) { y = S (3); return y; }
int main ( ) {
S s (1);
f (s);
printf ("%d ", s.x);
return 0;
}
4. Внести добавления в описания заданных методов (не меняя вывод на экран!) структур B и D так, чтобы все конструкции main () были правильными, а на печать выдалось 11163343.
struct B {
int x;
B (int a) { x = a; cout << 1; }
~B ( ) { cout << 3; }
};
struct D : B {
D (int d ) : B (d) { cout << 6; }
~D ( ) { cout << 4; }
};
int main ( ) {
B * p1 = new B [2], * p2 = new D (1);
delete [ ] p1;
delete p2;
return 0;
}
5. Добавить (если нужно) в класс Cl сл.слова «const» , так, чтобы заданный фрагмент программы был верным.
class Cl {
int i;
public:
Cl (int x) { i = x; }
Cl (Cl & y) { i = y.i; }
const Cl f ( Cl & c) const { cout << c. i << endl; return *this; }
};
const Cl t1 (const Cl a) {
Cl b = Cl (5);
return b.f ( a );
}
6. Написать:
1) функцию – шаблон (от одного параметра–типа: контейнера STL целых чисел), которая для любого последовательного контейнера STL распечатывает сумму его трех последних элементов, если таковые имеются,
2) а также функцию main (), которая формирует контейнер-вектор из 5 целых чисел и применяет к нему написанную функцию-шаблон.
-
Что напечатает следующая программа?
struct K {
virtual void add_st ( K * n ) { st ++; cout << “add_st (K*) from K\n”; }
static int st;
};
struct L: K {
virtual void add_st ( L * a ) { st++; cout << “add_st (L*) from L\n”; }
};
int K::st = 2;
int main ( ) {
L ob, ob2; K k , *pl = &ob;
pl -> add_st (& ob2);
k.st ++; ++ob.st ;
cout << k.st << ’ ‘ << ob.st << ‘ ‘ << K::st << endl; return 0;
}
-
Что напечатает следующая программа?
struct S {
S ( int a) { try { if (a > 0) throw *this;
else
if (a < 0) throw 0;
}
catch ( S & ) { cout << “SCatch_S&\n”; }
catch (int) { throw; }
cout << “SConstr\n”;
}
S (const S & a) { cout << “Copy\n”; }
~S ( ) { cout << “Destr\n”; }
};
int main ( ) {
try { S s1( 0 ), s2 ( 5 );
cout << “Main\n”;
}
catch (S &) { cout << “MainCatch_S&\n”; }
catch ( ... ) { cout << “MainCatch_...\n”; }
return 0;
}
-
Добавить в функцию putnull использование механизма RTTI так, чтобы ее выполнение всегда завершалось нормально.
struct B {
virtual void empty ( ) { }
};
struct D: B {
int mas [30] ;
};
void putnull ( B * pb ) { D d , *pd = (D*) pb;
if ( ! pb ) return;
for (int i = 0; i < 30; i++) pd -> mas[i] = 0 ;
}
10. Назвать три разных ситуации, когда автоматически вызывается конструктор копирования.