- •1. Приведите определение одного и того же числа в 10-ной и 16-ной системах счисления.
- •4. Приведите примеры определения строковых литералов. Как разместить длинную строковую константу в нескольких строках? Что такое «пустая строка»? Ее внутреннее представление.
- •6. Как явно указать, что константа должна иметь некоторый требуемый тип?
- •7. Как определяется переменная булевского типа? Ее значения и внутреннее представление.
- •33. Определите назначение операций ? , (тип)
- •73. Укажите способы доступа к полям структуры. Можно ли присвоить одну структуру другой?
- •74. Можно ли структуру возвратить из функции?
- •75. Как определить битовые поля?
- •76. Приведите синтаксис объявления и определения функции. Укажите область действия параметров функций.
- •77. Какие типы возвращаемых значений недопустимы для функций?
- •78. Как вернуть массив из функции? Укажите особенности передачи массивов как параметров.
- •79. Укажите особенности передачи параметров функций по значению, по адресу, по ссылке.
- •80. Можно ли объявить параметры функции с модификаторами?
- •81. Опишите особенности задания параметров функций со значениями по умолчанию.
- •82. Как передать функции переменное число параметров?
- •83. Зачем перегружают функции? Как компилятор определяет какую из перегруженных функций вызывают?
- •84. Как определяется шаблон функции? Опишите процесс конкретизации шаблона. Что есть явная специализация шаблона?
- •90. Как инициализировать, изменить поля класса, определенные как константные?
- •91. Опишите синтаксис определения метода класса вне описания класса.
- •92. Опишите синтаксис конструктора.
- •97. Можно ли построить класс без конструктора? Как в этом случае описать объекты класса?
- •99. Определите понятие «дружественная функция ».
- •100. Опишите синтаксис деструктора.Зачем виртуализировать деструктор? Можно ли наследовать деструктор?Можно ли явно вызвать деструктор?
- •101. Все ли операции могут быть перегружены? Можно ли перегрузить операции для базовых стандартных типов данных?
- •102. Зачем используют ключевое слово operator?
- •103. Укажите различные способы перегрузки операторов.
- •114. Определите понятие «абстрактный класс». Определите понятие «чистый виртуальный метод».
- •115. Опишите понятие «множественное наследование». Какие проблемы возникают при множествен-ном наследовании?
- •116. Опишите использование ключевых слов try, throw,catch.
- •117. Как определяется, какому блоку catch передается исключение для обработки?(стр.665)
- •118. Куда передается управление после обработки исключения?
- •119. Как организуется передача исключения в объемлющий блок?
6. Как явно указать, что константа должна иметь некоторый требуемый тип?
Чтобы явно указать, надо указать после числа суффикc: 1.22F, 11234L
7. Как определяется переменная булевского типа? Ее значения и внутреннее представление.
bool a = true; bool b = 1;
Тип bool может иметь всего два значения – true или false. Теоретически размер переменной равен одному биту, но большинство компиляторов на практике выделяет под такие переменные 1 байт, поскольку доступ к целому байту осуществляется быстрее, чем к отдельному биту. Переменные типа bool чаще всего используются для хранения результатов различных сравнений.
В общем случае все выражения, отличные от 0, считаются истинными.
8. Сравните переменные типов float и double и long double по назначению, объему памяти, внутрен-нему представлению.
Это все переменные вещественного типа, предназначенные для хранения вещественных чисел (у которых есть дробная часть) – тех чисел, которыми измеряются непрерывные величины.
float - 4 байта, с точностью до 7 знаков после запятой
double – 8 байтов, с точностью до 15 знаков после запятой
long double – характеристики обычно совпадают с характеристиками типа double, но все зависит от компилятора
9. Как явно определить вещественную константу нужного типа?
const float PI = 3.14159F
Указать после числа один из следующих суффиксов:
l – long; u – unsigned; f – float; lf – long double.
10. С какой целью используется операция sizeof?
sizeof() используется для определения объёма переменной определённого типа, еще можно узнавать размеры массива
11. Может ли идентификатор совпадать с ключевым словом?
Нет, не может. Ключевые слова: delete, new, int, return, break, case, throw, try, inline, goto, class, void, namespace.
12. В чем отличие между 'a' и ''a'' ?
’a’-символьный литерал (занимает 1 байт), “a”-строковый литерал (занимает 2 байта: один символ + символ конца строки).
13. Корректны ли выражение ++х=f(x)? х++=f(x)? х=++f(x)?
++х=f(x) – да,корректно; х++=f(x) – нет; х=++f(x) – да
14. Корректно ли выражение x<<y?
да, это побитовый сдвиг влево (изначально)
пример:
а = 0110 из четырех битов;
a<<1, то а=1100
а>>1,то а=0011
а>>2,то а=0001
если задана операция ___ operator << (<ClassX> x,<ClassY> y); то выражение x<<y корректно
15. Проинтерпретируйте выражение (pointer)?1:0 ?
если pointer на что-то указывает (не NULL), то 1, иначе 0
16. Можно ли указателю присвоить числовое значение?
нет, кроме 0, который будет расценивать как указатель, ни на что не указывающий (NULL) (или Можно 0 (NULL) без приведения, а любое другое только с приведением..)
17. Как можно использовать базовый тип void?
Eсли не надо ничего возвращать в методе или если надо сделать указатель на неизвестный тип
18. Приведите синтаксис объявления функции.
тип возвращаемого значения имя функции (список параметров через запятую);
тип возвращаемого значения область действия:: имя функции (список параметров);
(пример: int cube(int x);)
<тип результата> [<область действия>::]<имя функции> (<типы параметров (через запятую)>);
19.Приведите синтаксис определения функции. Можно ли определить вложенные функции? Если да, то каким образом и какова допустимая глубина вложенности?
тип возвращаемого значения имя функции (список параметров) {тело функции};
тип возвращаемого значения область действия:: имя функции (список параметров) {тело функции};
Нельзя.
20. Укажите назначение классов памяти для переменных. Как транслятор определяет класс памяти для переменной?
Класс памяти – это время, в течении которого переменная существует в памяти компьютера.
Помогают компилятору, указывая в какую память стоит помещать данную переменную, для улучшения эффективности программы.
Они используются для того чтобы указывать область видимости и действия переменных, а также того, будут ли они динамическими (будет ли их адрес меняться в процессе выполнения программы). К динамическим относятся auto и register. • auto. Этот спецификатор автоматического класса памяти указывает на то, что объект располагает-ся в локальной (или автоматически распределяемой) памяти. Он используется в операторах объявле-ния в теле функций, а также внутри блоков операторов. Объекты, имена которых объявляются со спецификатором auto, размещаются в локальной памяти непосредственно перед началом выполнения функции или блока операторов. При выходе из блока или при возвращении из функции (о механизмах вызова функций и возвращения из них речь ещё впереди), соответствующая область локальной памяти освобождается и все ранее размещённые в ней объекты уничтожаются. Таким образом спецификатор влияет на время жизни объекта (это время локально). Спецификатор auto используется редко, поскольку все объекты, определяемые непосредственно в теле функции или в блоке операторов и так по умолчанию располагаются в локальной памяти. Вне блоков и функций этот специфика-тор не используется. • register. Ещё один спецификатор автоматического класса памяти. Применяется к объектам, по умолчанию располагаемым в локальной памяти. Представляет из себя "ненавязчивую просьбу" к транслятору (если это возможно) о размещении значений объектов, объявленных со спецификатором register в одном из доступных регистров, а не в локальной памяти. Если по какой-либо причине в мо-мент начала выполнения кода в данном блоке операторов регистры оказываются занятыми, трансля-тор обеспечивает с этими объектами обращение, как с объектами класса auto. Очевидно, что в этом случае объект располагается в локальной области памяти. К статическим относятся static и extern. • static. Спецификатор внутреннего статического класса памяти. Применяется только(!) к именам объектов и функций. В C++ этот спецификатор имеет два значения. Первое означает, что определяе-мый объект располагается по фиксированному адресу. Тем самым обеспечивается существование объекта с момента его определения до конца выполнения программы. Второе значение означает ло-кальность. Объявленный со спецификатором static локален в одном программном модуле (то есть, недоступен из других модулей многомодульной программы) или в классе (о классах - позже). Может использоваться в объявлениях вне блоков и функций. Также используется в объявлениях, располо-женных в теле функций и в блоках операторов. • extern. Спецификатор внешнего статического класса памяти. Обеспечивает существование объекта с момента его определения до конца выполнения программы. Объект, объявленный со спецификато-ром extern доступен во всех модулях программы, то есть глобален.
Транслятор определяет класс памяти автоматически. СТР.203
21. Можно ли описать несколько переменных одного типа в одном определении? Можно ли описать несколько переменных разных типов в одном определении? Можно ли инициализировать несколько переменных в одном операторе?
Можно описать несколько переменных одного типа в одном определении. (int a,b;)
Можно описать несколько переменных разного типа в одном определенни. (int *p, d;)
Можно инициализировать несколько переменных в одном операторе.( int x,q; x = q = 1;)
22. Как используется модификатор const для переменных?
Ключевое слово const предшествует описанию типа переменной и означает, что во время выполнения программы запрещено изменять значение этой переменной. Любая попытка изменить значение переменной, описанной с таким префиксом, приведет к выдаче компилятором сообщение об ошибке. Префикс const гарантирует, что наша программа не сможет случайно изменить значение переменной.
23. Может ли тип инициализирующего выражения не совпадать с типом определяемой переменной?
Да, может. int k = ‘a’;
24. Что такое «область действия идентификатора»? Как она определяется?
Идентификаторы – имена, даваемые переменным и другим программы.
Область действия идентификатора - это часть программы, в которой на идентификатор можно ссылаться. Существуют четыре области действия идентификатора: 1) область действия функция; 2) область действия файл; 3) область действия блок; 4) область действия прототип функции. Идентификатор, объявленный вне любой функции (на внешнем уровне), имеет область действия файл. Такой идентификатор «известен» всем функциям от точки его объявления до конца файла. Глобальные переменные, описания функции, прототипы функции, находящиеся вне функции - все они имеют областью действия файл.
25. Доступна ли локальная переменная во вложенных блоках? Если да, как получить к ней доступ? Как получить доступ к глобальной переменной, если ее идентификатор совпадает с локальной переменной?
Локальная переменная – переменные, определяемые внутри функции (их область видимости ограничивается этой функцией).
Да, доступна. ОБЪЯСНЕНИЕ!!!
Доступ к глобальной переменно, если ее идентификатор совпадает с локальной переменной можно получить с помощью ::
int i = ::i; // локальной i присваивается значение глобальной i
26. Какую переменную называют глобальной? Как определяется область действия глобальной переменной?
Глобальная переменная – это переменная, объявленная вне любой функции, класса или пространства имен. Глобальные переменные имеют статический класс памяти, что означает их существование в течении всего времени выполнения программы. Они видимы от места своего объявления до конца того файла, в котором они определены.
27. Совпадает ли область видимости переменной с областью действия?
Область действия переменной совпадает с областью видимости переменной, если она не перекрывается локальной для вложенного блока переменной с таким же именем.
28. Как используется операция :: ?
Операция с оператором :: дает внутри блока (функции) доступ к глобальной переменной (только к глобальной) при наличии локальной «тезки»
int i = ::i; // локальной i присваивается значение глобальной i
Символ :: - это символ является знаком операции глобального доступа.
29. Как инициализировать статические переменные?
static float a = 0; // инициализация статических переменных при первом вызове
static int = 5;
Инициализация статический переменных происходит один раз – во время первого вызова функции. При последующих вызовах повторной инициализации не происходит.
30. Определите назначение операций ! ~ & %
! – логическое отрицание
~ - побитовое отрицание (изменяет 0 на 1 и 1 на 0)
& - побитовое «и» (поразрядное сложение И) – биты результата устанавливаются в 1, если соответствующие биты обоих операндов равны 1
% - остаток от деления
31. Определите назначение операций / << ^
/ - деление (нацело или дробно, смотря что и на что делят)
<< - побитовый сдвиг влево (ну еще перегружено для записи в поток)
^ - поразрядное исключающее ИЛИ ( Биты результата устанавливаются в 1, если соответствующий бит только одного из операндов равен 1.)
32. Определите назначение операций >> || &&
>> - побитовый сдвиг вправо ) (ну ещё перегружено для чтения из потока)
|| - логическое ИЛИ
&& - логическое И
