1. Что выведет следующий фрагмент программы? unsigned char uc = 127; signed char sc = uc; std::cout << static_cast(sc); Правильный ответ: 127 Неправильные ответы: а) -127 б) 0 в) этот фрагмент вызовет ошибку при компиляции 2. Можно ли присваивать произвольные целые значения переменным типа перечисления, как в следующем примере? enum Color { red, green, blue }; Color c = 5; Правильный ответ: нет, нельзя Неправильные ответы: а) да, можно, если значение не превышает наибольшего значения перечисления б) да, можно, если значение принадлежит диапазону типа int в) да, можно, если значение принадлежит диапазону типа char 3. Сколько переменных типа «указатель на int» объявляется в следующем примере? int** a, b, *c; Правильный ответ: 1 Неправильные ответы: а) 2 б) 3 в) 0 4. Что выведет следующий фрагмент программы, при условии, что размер типа short int равен 2 байтам? short int a[5] = { 23, 24, 25, 26 }; std::cout << a[4]; Правильный ответ: 0 Неправильные ответы: а) 27 б) 32767 в) не определено 5. Как определить константу ptr типа «указатель на char», чтобы она содержала адрес переменной ch? Правильный ответ: char *const ptr = &ch; Неправильные ответы: а) char *const ptr = ch; б) const char* ptr = &ch; в) const char* ptr = ch; 6. Почему следующее предложение вызовет ошибку на этапе компиляции? char area_code[3] = "495"; Правильный ответ: потому что размер массива недостаточен для литерала "495" Неправильные ответы: а) потому что при объявлении массива его нельзя инициализировать б) потому что при инициализации массива нельзя указывать его размер в) потому что строками можно инициализировать только указатели на char 7. Что вернёт func()? void do_work(int **&r) { *r += 1; } int func() { int a[] = { 3, 93, 333 }; int* p[] = { &a[0], &a[2] }; int** pp = &p[0]; do_work(pp); return **pp; } Правильный ответ: 93 Неправильные ответы: а) 4 б) 333 в) адрес a[2] 8. Как в теле функции do_work определить длину переданного ей массива arr? void do_work(int arr[]); void func() { int arr[] = { 2, 3, 5, 7, 11 }; do_work(arr); } Правильный ответ: никак; нет способа сделать это Неправильные ответы: а) выражением sizeof arr б) выражением sizeof(arr) в) выражением strlen(arr) 9. Что обозначает имя what после следующего объявления? int (*what)(int*); Правильный ответ: указатель на функцию, принимающую int* и возвращающую int Неправильные ответы: а) функцию, принимающую int* и возвращающую int б) функцию, принимающую int* и возвращающую int* в) тип «указатель на функцию, принимающую int* и возвращающую int» 10. В теле одной из функций класса определена статическая переменная. Будет ли она одной и той же для разных экземпляров класса? Правильный ответ: да Неправильные ответы: а) только если это статическая функция б) только если эта функция объявлена как public в) нет 11. Что означает ключевое слово const в следующем примере? class Something { public: int do_work(int how_much) const; } Правильный ответ: что функция Something::do_work не меняет состояние объекта Неправильные ответы: а) что функцию Something::do_work нельзя перегружать б) что функцию Something::do_work нельзя переопределять в классах-потомках в) что функции Something::do_work можно передавать только константы 12. Чему будет равна переменная h после вызова func()? int h; struct First { ~First() { h = 1; } }; struct Second { ~Second() { h = 2; } }; void func() { h = 3; First f; Second s; } Правильный ответ: 1 Неправильные ответы: а) 2 б) 3 в) не определено 13. Почему вызов func() приведёт к аварийному останову программы? class Something { int* a; public: Something() { a = new int; } ~Something() { delete a; } }; void func() { Something s1; Something s2 = s1; Something s3; } Правильный ответ: потому что деструктор будет вызван лишний раз Неправильные ответы: а) потому что для класса Something не определён конструктор копирования б) потому что операция new недопустима в конструкторе в) потому что указатель не может быть объявлен в классе как private 14. Сколько раз будет выведено «first»? struct First { First() { std::cout << "first\n"; } }; class Second { First a; public: Second(First a1) { a = a1; } }; First a; Second b = Second(a); Правильный ответ: 2 Неправильные ответы: а) 0 б) 1 в) 3 15. Допустимо ли инициализировать целочисленные поля класса предложениями вида «int a = 10»? Правильный ответ: да, но только статические константные поля Неправильные ответы: а) да, любые поля б) да, но только константные поля в) нет 16. Что выведет func()? struct Something { int data; float operator+ (float a) { return data + a; } double operator+ (double a) { return data + (2 * a); } }; void func() { Something s; s.data = 4; std::cout << (s + 2.3); } Правильный ответ: 8.6 Неправильные ответы: а) 6.3 б) 4 в) зависит от реализации 17. Пусть есть класс SuperNumber. Какую функцию надо добавить в него, чтобы его экземпляры можно было использовать в арифметических операциях с целыми числами типа int? Правильный ответ: operator int() Неправильные ответы: а) SuperNumber(int) б) operator+ (const int&) в) operator new (const int&) 18. Как указать, что public-метод void do_lab(Lab) класса Student может обращаться к private-части класса Lab? Правильный ответ: объявить friend void Student::do_lab(Lab) в классе Lab Неправильные ответы: а) объявить void Student::do_lab(Lab) в public-части класса Lab б) объявить void Student::do_lab(Lab) в private-части класса Lab в) объявить static void Student::do_lab(Lab) в классе Lab 19. Почему следующий код вызовет ошибку на этапе компиляции? class Teacher { std::string subject; }; class Professor : public Teacher { public: void publish_book() { std::cout << subject; } }; Правильный ответ: потому что поле Teacher::subject объявлено как private Неправильные ответы: а) потому что для класса Teacher не определён конструктор б) потому что для класса Professor не определён конструктор в) потому что поле Teacher::subject не инициализируется 20. Что означает «= 0» в этом объявлении функции класса? virtual int do_something() = 0; Правильный ответ: что эта функция не опеределена в данном классе Неправильные ответы: а) что эта функция всегда возвращает 0 б) что эту функцию не наследуют классы-потомки в) что эту функцию нельзя переопределять в классах-потомках