Опишите, что задаёт этот декларатор (спецификатор типа)
- double * (*f)(int x);
- int (* sum [5])[8];
- long int * (*m)(void);
- short int * (*m)(const char x[20]);
- float (* (*m)(int))[8];
- double (* (*m4)[5])[8];
- double (* & x)[10]
- long (* (*pp)(int *x))[20];
- enum qwe * p(char x, float **y);
- 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"
~
Строки:
нужен фрагмент кода. Обязательно используйте функции для работы со строками.
- Как сравнить две строки без учёта регистра букв на равенство?
- Как скопировать строку в существующий буфер с учётом возможного переполнения буфера?
- Как найти адрес последнего символа строки?
- Как найти первое вхождение заданного символа в строку (порядковый номер в строке)?
- Как найти первое вхождение заданной подстроки в строку (порядковый номер в строке)?
- Как конвертировать строку в верхний регистр?
- Как конвертировать строку в нижний регистр?
- Как найти последнее вхождение заданного символа в строку (порядковый номер в строке)?
- Как обратить порядок символов в строке (cba вместо abc)?
- Как найти порядковый номер первого символа в исследуемой строке, не принадлежащего другой,
заданной строке (например, для строки "8945abcde" и тестовой строки "0123456789" это будет номер первой буквы – 'a')?
Файлы
нужен фрагмент кода! Обязательно использовать функции стандартной библиотеки ввода/вывода.
- Как переместить файловый указатель на позицию 220 байт от конца файла?
- Как переместить файловый указатель на 120 байт вперёд (к концу файла) от текущей позиции в файле?
- Как переместить файловый указатель на 120 байт назад (к началу файла) от текущей позиции в файле?
- Как переместить файловый указатель на позицию 220 байт от начала файла?
- Как, прочитав из файла один символ, выявить факт окончания файла?
- Как определить, что попытка чтения/записи окончилась успешно?
- Как программно переопределить в файл стандартный поток ввода/вывода?
- Как, не читая файл, открытый для чтения, определить его размер?
- Как однократно принудительно сбросить на диск программный буфер вывода в файл?
- Как совсем отменить для потока вывода буферизацию выводимых данных?
- Как обрезать существующий файл до нужной длины?
- Как удалить существующий файл?
- Как переименовать существующий файл?
Определите бинарный (или унарный) оператор.
- a+b для комплексных чисел
- a-b для комплексных чисел
- a*b для комплексных чисел
- a+b для трёхкомпонентных векторов
- a-b для трёхкомпонентных векторов
- a*b как скалярное произведение для трёхкомпонентных векторов
- a*b как векторное произведение для трёхкомпонентных векторов
- !a для комплексных чисел как сопряжённое число
- a^b для трёхкомпонентных векторов как скалярное произведение
- a+=b для трёхкомпонентных векторов
- a-=b для трёхкомпонентных векторов
- a*b как произведение трёхкомпонентного вектора на вещественное число
- a*b как произведение матрицы и трёхкомпонентного вектора
Наследование
Опишите наследование этих классов по правилам C++. Символ → означает, кто от кого происходит,
например, A,B→C означает, что C наследует от A и B. Имеет ли место множественное наследование?
Имеет ли место многократное наследование какого-то базового класса?
Предложите, где добавить виртуальное наследование для устранения дублирования данных при наследовании.
Опишите порядок вызова конструкторов.
- A → B; B → C; B → D; A, D, C → E;
- A → B; A → C; B → D; C → E: D, E → F;
- A → B; A → C; B → D; B → E; D, E → F; F, C → H;
- A → B; B → C; B → D; E → F; F → G; D, G → H;
- A → B; A → C; B → D; C → E: E → F; K → G, F → H;
- A → B; B → C; C → D; B → E; D, E → F; F → G;
- A → B; B → C; B → D; B → E; D, E → F; F → G;
Ответьте на вопросы:
- Что такое ссылка? Чем ссылка отличается от указателя? Приведите примеры.
- Что такое сигнатура функции? Как описать функцию, отличаемую от других функций только по имени, но не сигнатуре? Приведите примеры.
- Что такое сигнатура функции? Как можно описать несколько функций, различных по сигнатуре, но не по имени? Приведите примеры.
- Что такое перегрузка функций? Каковы ограничения на перегрузку функций? Приведите примеры.
- Что такое class? В чём его отличие от простых структурных типов? Приведите примеры.
- Как в C++ осуществляется инкапсуляция (сокрытие) данных/методов класса? Приведите примеры.
- Как в C++ осуществляется инкапсуляция (сокрытие) данных базового класса при наследовании? Приведите примеры.
- Как описать метод класса? Как двумя способами описать инлайнируемый метод класса? Что такое this?
- Что такое множественное наследование? Как вызвать метод при наличии нескольких его унаследованных реализаций? Приведите примеры.
- Что такое множественное наследование? Каковы его потенциальные проблемы? Что такое виртуальное множественное наследование? Приведите примеры.
- Что такое конструктор? Чем он отличается от обычных методов? Приведите примеры.
- Что такое деструктор? Чем он отличается от обычных методов? Приведите примеры.
- Как реализуется конструктор производного класса? Конструктор производного класса при наличии множественного наследования? Конструктор производного класса при наличии виртуального множественного наследования?
- Что такое виртуальная функция? Зачем их используют? Приведите свой пример.
- Что такое абстрактный класс? Зачем их используют? Приведите свой пример.
- Чем отличаются перегрузка (overloading) и переопределение (overriding) функций? Приведите примеры.
- Где и для чего можно использовать ключевое слово static при описании классов C++? Приведите примеры.
- Какие библиотеки ввода/вывода можно использовать в C/C++? Какие заголовочные файлы нужно включить в программу для их использования?
- Как определить метод, разрешённый для неизменяемых объектов? Как задать поле класса, которое можно менять даже у «неизменяемых» объектов? Приведите примеры.
- Что такое исключительная ситуация? Как возбудить, поймать, «перевозбудить» исключительную ситуацию? Приведите примеры.
- Что такое исключительная ситуация? Как поймать исключительную ситуацию? Каков должен быть порядок ловушек для исключительных ситуаций?
- Как в C++ использовать динамическое выделение памяти? Приведите примеры выделения памяти с порождением исключительных ситуаций и без.
- Что такое дружественная функция? Приведите примеры.
- Какие унарные операторы можно переопределить? Какие два способа есть для переопределения унарных операторов? Приведите примеры.
- Какие бинарные операторы можно переопределить? Какие два способа есть для переопределения бинарных операторов? Приведите примеры.
- Как переопределить оператор [] для своего класса «безопасного массива»? Приведите пример.
- Как переопределить оператор -> для своего класса «умного указателя»? Приведите пример.
- Как в библиотеке C++ потокового ввода/вывода осуществляется работа с текстовыми файлами? Приведите примеры.
- Как в библиотеке C++ потокового ввода/вывода осуществляется работа с двоичными файлами? Приведите примеры.
Ответьте на вопросы:
- Как описать метод класса? Как двумя способами описать инлайнируемый метод класса? Каковы ограничения на использование инлайн-функций?
- Что такое абстрактный класс? Зачем их используют? Приведите свой пример.
- Где и для чего можно использовать ключевое слово static при описании классов C++? Приведите примеры.
- Какие библиотеки ввода/вывода можно использовать в C/C++? Какие заголовочные файлы нужно включить в программу для их использования?
- Как определить метод, разрешенный для неизменяемых объектов? Как задать поле класса, которое можно менять даже у «неизменяемых» объектов? Приведите примеры.
- Что такое дружественная функция? Что такое дружественный класс? Приведите примеры кода.
- Какие унарные операторы можно переопределить? Какие два способа есть для переопределения унарных операторов? Приведите примеры.
- Какие бинарные операторы можно переопределить? Какие два способа есть для переопределения бинарных операторов? Приведите примеры.
- Как переопределить оператор [] для своего класса? Приведите пример.
- Как переопределить оператор -> для своего класса? Приведите пример.
- Как переопределить оператор () для своего класса? Приведите пример.
- Как в библиотеке C++ потокового ввода/вывода осуществляется работа с текстовыми файлами? Приведите примеры.
- Как в библиотеке C++ потокового ввода/вывода осуществляется работа с двоичными файлами? Приведите примеры.
- Что такое манипулятор вывода? Какие манипуляторы вы знаете? Как определить текущие установки потока для форматирования вывода?
Ответьте на вопрос:
- Переменные каких типов языка C++ могут быть аргументами оператора выбора switch? Приведите пример оператора выбора.
- Когда можно без опасения соединять в одном операторе несколько побочных эффектов (результатов)?
- Каков порядок распознания и приоритет спецификаторов типа?
- Как можно объявить переменную структурного типа (приведите разные способы)?
- Как можно контролировать точность вычислений выбором нужных типов языка C++?
- Как описать цикл for, имеющий пустое тело, имеющий пролог и/или эпилог из нескольких операторов? Приведите разные примеры.
- Чем отличаются (синтаксически и по смыслу) макроопределения с параметрами и без? Приведите примеры.
- Как можно использовать директивы условной компиляции и что это за директивы?
- Какие действия допустимы над указателями на фундаментальные типы, на структурные типы, на функции? Приведите примеры.
- Какие средства предусмотрены в языке C++ для синтаксической поддержки возможности раздельной компиляции объектных модулей? Приведите примеры.
- Как с помощью побитовых целочисленных операторов извлечь из 4-байтового числа старшие 2 байта? Объясните и приведите пример кода.
- Как переносимым способом определить размер переменной в языке C++? Опишите размеры фундаментальных типов для стандартной 32-разрядной программы.
- Как описать функцию с произвольным количеством параметров? Каковы достоинства и недостатки таких функций?
- Как сделать доступной внешнюю (библиотечную) функцию? Как для удобства подключения многих функций использовать заголовочные файлы?
- Какую роль играет функция main? Какие синтаксически допустимые формы она может иметь?
- Где и для чего можно использовать оператор break? Приведите примеры.
- Где и для чего можно использовать оператор continue? Приведите примеры.
- Где и для чего можно использовать оператор default? Приведите примеры.
- Где и для чего можно использовать ключевое слово static (можно ограничиться языком C, без C++)? Приведите примеры.