Опишите, что задаёт этот декларатор (спецификатор типа)

  1. double * (*f)(int x);
  2. int (* sum [5])[8];
  3. long int * (*m)(void);
  4. short int * (*m)(const char x[20]);
  5. float (* (*m)(int))[8];
  6. double (* (*m4)[5])[8];
  7. double (* & x)[10]
  8. long (* (*pp)(int *x))[20];
  9. enum qwe * p(char x, float **y);
  10. long (*p(int x))[20];

Каков порядок вычисления для этого предложения (распишите последовательность вычислений), какие предположения можно сделать о типе операндов? Имеет ли место неоднозначность вычислений?

~ a += (y++*p) **q + u++; ~ x *= (a+=b, u) – x++; ~ x += y += (z++, --r, u) + r; ~ a *= b + (c++ - d) – (e+=*h, k); ~ a &= b | (c ^= d, e &= f); ~ a += a > b ? (x-=y, z)+5 : d+=4; ~ w &= (a+=b, ++u) + ++x; ~ x *= (a+=b, ++u) – (x++) * u; ~

Определите размер структурного типа. Мотивируйте свой ответ.

номер задание номер задание номер задание
1 struct { int x; int x:7; int x:20; long long (*pg)(int); double y; char z[8]; } mystruct; 2 struct { int x; int x:7; double y; char z[8]; int x:20; } mystruct; 3 struct { int x:16; short ss[2]; int x:7; float y[3]; char z[12]; int x:20; } mystruct;
struct { int x; int x:7; double y; char z[8]; int x:20; } mystruct;
struct { short p:12; long double y; int x; char z[4]; int x:7; int x:20; } mystruct;
struct { int x; long double **y; char z[4]; short int x:10; char u:5; int x:16; } mystruct;
struct { double *y; int x; short x:10; short x:8; char z[8]; int x:6; } mystruct;
struct { double *y; union { double u; long v; } un; char z[8]; short x:10; int x:6; int x; } mystruct;
union { struct { int x:6; int x:20; int x:12; } un; float z; long double w; } mystruct;
union { long long w; struct { unsigned int x:16; int x:5; unsigned int x:10; } un; float z; } mystruct;

Какие дополнительные параметры (и какого типа) требует эта строка форматного вывода и что будет выведено? ~ "qwe= %016llx, asd=%*.*le\n" ~ "asd\r\n%s= %08d\n" ~ "qwe= %0*d, www=%s\n" ~ "qwe=%12.6le\r\n, xxx=%%%2d" ~ "qwe=%.6lf\r\nasd=%08X" ~ "qwe=%g\r\nasd=%8u" ~ "qwe= %*lu, www=%12s\n" ~ "qwe= %08p, www=%c\n" ~

Строки:

нужен фрагмент кода. Обязательно используйте функции для работы со строками.

  1. Как сравнить две строки без учёта регистра букв на равенство?
  2. Как скопировать строку в существующий буфер с учётом возможного переполнения буфера?
  3. Как найти адрес последнего символа строки?
  4. Как найти первое вхождение заданного символа в строку (порядковый номер в строке)?
  5. Как найти первое вхождение заданной подстроки в строку (порядковый номер в строке)?
  6. Как конвертировать строку в верхний регистр?
  7. Как конвертировать строку в нижний регистр?
  8. Как найти последнее вхождение заданного символа в строку (порядковый номер в строке)?
  9. Как обратить порядок символов в строке (cba вместо abc)?
  10. Как найти порядковый номер первого символа в исследуемой строке, не принадлежащего другой, заданной строке (например, для строки "8945abcde" и тестовой строки "0123456789" это будет номер первой буквы – 'a')?

Файлы

нужен фрагмент кода! Обязательно использовать функции стандартной библиотеки ввода/вывода.

  1. Как переместить файловый указатель на позицию 220 байт от конца файла?
  2. Как переместить файловый указатель на 120 байт вперёд (к концу файла) от текущей позиции в файле?
  3. Как переместить файловый указатель на 120 байт назад (к началу файла) от текущей позиции в файле?
  4. Как переместить файловый указатель на позицию 220 байт от начала файла?
  5. Как, прочитав из файла один символ, выявить факт окончания файла?
  6. Как определить, что попытка чтения/записи окончилась успешно?
  7. Как программно переопределить в файл стандартный поток ввода/вывода?
  8. Как, не читая файл, открытый для чтения, определить его размер?
  9. Как однократно принудительно сбросить на диск программный буфер вывода в файл?
  10. Как совсем отменить для потока вывода буферизацию выводимых данных?
  11. Как обрезать существующий файл до нужной длины?
  12. Как удалить существующий файл?
  13. Как переименовать существующий файл?

Определите бинарный (или унарный) оператор.

  1. a+b для комплексных чисел
  2. a-b для комплексных чисел
  3. a*b для комплексных чисел
  4. a+b для трёхкомпонентных векторов
  5. a-b для трёхкомпонентных векторов
  6. a*b как скалярное произведение для трёхкомпонентных векторов
  7. a*b как векторное произведение для трёхкомпонентных векторов
  8. !a для комплексных чисел как сопряжённое число
  9. a^b для трёхкомпонентных векторов как скалярное произведение
  10. a+=b для трёхкомпонентных векторов
  11. a-=b для трёхкомпонентных векторов
  12. a*b как произведение трёхкомпонентного вектора на вещественное число
  13. a*b как произведение матрицы и трёхкомпонентного вектора

Наследование

Опишите наследование этих классов по правилам C++. Символ → означает, кто от кого происходит, например, A,B→C означает, что C наследует от A и B. Имеет ли место множественное наследование? Имеет ли место многократное наследование какого-то базового класса? Предложите, где добавить виртуальное наследование для устранения дублирования данных при наследовании. Опишите порядок вызова конструкторов.

  1. A → B; B → C; B → D; A, D, C → E;
  2. A → B; A → C; B → D; C → E: D, E → F;
  3. A → B; A → C; B → D; B → E; D, E → F; F, C → H;
  4. A → B; B → C; B → D; E → F; F → G; D, G → H;
  5. A → B; A → C; B → D; C → E: E → F; K → G, F → H;
  6. A → B; B → C; C → D; B → E; D, E → F; F → G;
  7. A → B; B → C; B → D; B → E; D, E → F; F → G;

Ответьте на вопросы:

  1. Что такое ссылка? Чем ссылка отличается от указателя? Приведите примеры.
  2. Что такое сигнатура функции? Как описать функцию, отличаемую от других функций только по имени, но не сигнатуре? Приведите примеры.
  3. Что такое сигнатура функции? Как можно описать несколько функций, различных по сигнатуре, но не по имени? Приведите примеры.
  4. Что такое перегрузка функций? Каковы ограничения на перегрузку функций? Приведите примеры.
  5. Что такое class? В чём его отличие от простых структурных типов? Приведите примеры.
  6. Как в C++ осуществляется инкапсуляция (сокрытие) данных/методов класса? Приведите примеры.
  7. Как в C++ осуществляется инкапсуляция (сокрытие) данных базового класса при наследовании? Приведите примеры.
  8. Как описать метод класса? Как двумя способами описать инлайнируемый метод класса? Что такое this?
  9. Что такое множественное наследование? Как вызвать метод при наличии нескольких его унаследованных реализаций? Приведите примеры.
  10. Что такое множественное наследование? Каковы его потенциальные проблемы? Что такое виртуальное множественное наследование? Приведите примеры.
  11. Что такое конструктор? Чем он отличается от обычных методов? Приведите примеры.
  12. Что такое деструктор? Чем он отличается от обычных методов? Приведите примеры.
  13. Как реализуется конструктор производного класса? Конструктор производного класса при наличии множественного наследования? Конструктор производного класса при наличии виртуального множественного наследования?
  14. Что такое виртуальная функция? Зачем их используют? Приведите свой пример.
  15. Что такое абстрактный класс? Зачем их используют? Приведите свой пример.
  16. Чем отличаются перегрузка (overloading) и переопределение (overriding) функций? Приведите примеры.
  17. Где и для чего можно использовать ключевое слово static при описании классов C++? Приведите примеры.
  18. Какие библиотеки ввода/вывода можно использовать в C/C++? Какие заголовочные файлы нужно включить в программу для их использования?
  19. Как определить метод, разрешённый для неизменяемых объектов? Как задать поле класса, которое можно менять даже у «неизменяемых» объектов? Приведите примеры.
  20. Что такое исключительная ситуация? Как возбудить, поймать, «перевозбудить» исключительную ситуацию? Приведите примеры.
  21. Что такое исключительная ситуация? Как поймать исключительную ситуацию? Каков должен быть порядок ловушек для исключительных ситуаций?
  22. Как в C++ использовать динамическое выделение памяти? Приведите примеры выделения памяти с порождением исключительных ситуаций и без.
  23. Что такое дружественная функция? Приведите примеры.
  24. Какие унарные операторы можно переопределить? Какие два способа есть для переопределения унарных операторов? Приведите примеры.
  25. Какие бинарные операторы можно переопределить? Какие два способа есть для переопределения бинарных операторов? Приведите примеры.
  26. Как переопределить оператор [] для своего класса «безопасного массива»? Приведите пример.
  27. Как переопределить оператор -> для своего класса «умного указателя»? Приведите пример.
  28. Как в библиотеке C++ потокового ввода/вывода осуществляется работа с текстовыми файлами? Приведите примеры.
  29. Как в библиотеке C++ потокового ввода/вывода осуществляется работа с двоичными файлами? Приведите примеры.

Ответьте на вопросы:

  1. Как описать метод класса? Как двумя способами описать инлайнируемый метод класса? Каковы ограничения на использование инлайн-функций?
  2. Что такое абстрактный класс? Зачем их используют? Приведите свой пример.
  3. Где и для чего можно использовать ключевое слово static при описании классов C++? Приведите примеры.
  4. Какие библиотеки ввода/вывода можно использовать в C/C++? Какие заголовочные файлы нужно включить в программу для их использования?
  5. Как определить метод, разрешенный для неизменяемых объектов? Как задать поле класса, которое можно менять даже у «неизменяемых» объектов? Приведите примеры.
  6. Что такое дружественная функция? Что такое дружественный класс? Приведите примеры кода.
  7. Какие унарные операторы можно переопределить? Какие два способа есть для переопределения унарных операторов? Приведите примеры.
  8. Какие бинарные операторы можно переопределить? Какие два способа есть для переопределения бинарных операторов? Приведите примеры.
  9. Как переопределить оператор [] для своего класса? Приведите пример.
  10. Как переопределить оператор -> для своего класса? Приведите пример.
  11. Как переопределить оператор () для своего класса? Приведите пример.
  12. Как в библиотеке C++ потокового ввода/вывода осуществляется работа с текстовыми файлами? Приведите примеры.
  13. Как в библиотеке C++ потокового ввода/вывода осуществляется работа с двоичными файлами? Приведите примеры.
  14. Что такое манипулятор вывода? Какие манипуляторы вы знаете? Как определить текущие установки потока для форматирования вывода?

Ответьте на вопрос:

  1. Переменные каких типов языка C++ могут быть аргументами оператора выбора switch? Приведите пример оператора выбора.
  2. Когда можно без опасения соединять в одном операторе несколько побочных эффектов (результатов)?
  3. Каков порядок распознания и приоритет спецификаторов типа?
  4. Как можно объявить переменную структурного типа (приведите разные способы)?
  5. Как можно контролировать точность вычислений выбором нужных типов языка C++?
  6. Как описать цикл for, имеющий пустое тело, имеющий пролог и/или эпилог из нескольких операторов? Приведите разные примеры.
  7. Чем отличаются (синтаксически и по смыслу) макроопределения с параметрами и без? Приведите примеры.
  8. Как можно использовать директивы условной компиляции и что это за директивы?
  9. Какие действия допустимы над указателями на фундаментальные типы, на структурные типы, на функции? Приведите примеры.
  10. Какие средства предусмотрены в языке C++ для синтаксической поддержки возможности раздельной компиляции объектных модулей? Приведите примеры.
  11. Как с помощью побитовых целочисленных операторов извлечь из 4-байтового числа старшие 2 байта? Объясните и приведите пример кода.
  12. Как переносимым способом определить размер переменной в языке C++? Опишите размеры фундаментальных типов для стандартной 32-разрядной программы.
  13. Как описать функцию с произвольным количеством параметров? Каковы достоинства и недостатки таких функций?
  14. Как сделать доступной внешнюю (библиотечную) функцию? Как для удобства подключения многих функций использовать заголовочные файлы?
  15. Какую роль играет функция main? Какие синтаксически допустимые формы она может иметь?
  16. Где и для чего можно использовать оператор break? Приведите примеры.
  17. Где и для чего можно использовать оператор continue? Приведите примеры.
  18. Где и для чего можно использовать оператор default? Приведите примеры.
  19. Где и для чего можно использовать ключевое слово static (можно ограничиться языком C, без C++)? Приведите примеры.