Старые вопросы на экзамен по C++
Содержание
Часть 1
- Что определяет класс? Чем обличается класс от объекта?
- Класс определяет тип объекта, а объект - это конкретный экземпляр класса.
- Можно ли объявлять массив объектов? А массив классов?
- Смотря что считать массивом - в обычном смысле можно объявить массив объектов, с помощью метапрограммирования можно делать списки типов(классов)
- Разрешается ли объявлять указатель на объект? А указатель на класс?
- Да. Нет.
- Допускается ли передавать объекты в качестве параметров, и какими способами? А возвращать как результат?
- Допускается по значению и по ссылке. Возвращать также можно значение или ссылку.
- Как называется использование объекта одного класса в качестве поля другого класса?
- ??
- Является ли структура классом? Чем класс отличается от структуры?
- Является, у структуры все поля/методы по умолчанию public, у класса - private.
- Объясните принцип инкапсуляции.
- Инкапсуляция - сокрытие методов и полей класса от пользователя, в целях сохранения внутренних инвариантов. При этом то, что помечено как public, называется интерфейсом класса.
- Что такое композиция?
- ??
- Для чего используются ключевые слова public и private?
- см. инкапсуляция, также при public - наследовании все члены базового класса наследуются с теми же модификаторами, при private - все члены базового класса становятся private.
- Можно ли использовать ключевые слова public и private в структуре?
- да
- Существуют ли ограничения на использование public и private в классе? А в структуре?
- нет
- Обязательно ли делать поля класса приватными?
- нет
- Что такое метод? Как вызывается метод?
- Это функция, являющаяся членом класса. Если она не статическая, при ее вызове в нее неявно передается указатель на экземпляр, от которого она вызывается.
- Может ли метод быть приватный?
- да
- Как определить метод непосредственно внутри класса? А вне класса? Чем эти определения отличаются?
- Просто берем и определяем :) Вне класса - в описании класса пишем только объявление метода, вне класса реализацию.
- Можно в методах присваивать параметрам значения по умолчанию?
- да
- Что обозначается ключевым словом this?
- указатель на экземпляр класса, для которого вызван текущий метод. В статическом методе this недоступен.
- Зачем нужны константные методы? Чем отличается определение константного метода от обычного?
- константный метод гарантирует, что мы не изменим состояние класса в процессе его работы. После сигнатуры надо написать const.
- Может ли константный метод вызываться для объектов-переменных? А обычный метод — для объектов-констант?
- Да. Нет.
- Объясните принцип полиморфизма.
- Полиморфизм - возможность работать с разными типами одинаковым образом. Статический - перегрузка функций, шаблоны. Динамический - виртуальные функции.
- Сколько места в памяти занимает объект класса? Как это узнать?
- sizeof(a)
- Каков размер «пустого» объекта?
- Здесь вроде понятно, что он должен быть ненулевой(у меня 1 байт, например), вопрос только почему?
- Влияют ли методы на размер объекта?
- Если есть виртуальные методы, то размер увеличивается засчет указателся на таблицу виртуальных функций.
- Одинаков ли размер класса и аналогичной структуры?
- да
- Какие операции нельзя перегружать? Как вы думаете, почему?
- a ? b : c - в Страуструпе говорится что нет особых причин запрещать его перегрузку, так что непонятно.
- a::b - это вообще говоря не какая-то функция, а просто удобный способ избежать конфликта имен.
- a.b - непонятно, как тогда вызывать методы, и могут возникать конфликты ([1])
- sizeof(a), typeid(a) - видимо, что-то низкоуровневое, тоже надо поподробнее узнать
- a.*b - вообще без понятия что он делает
- Можно ли перегружать операции для встроенных типов данных?
- Нет
- Можно ли при перегрузке изменить приоритет операции?
- Нет
- Можно ли определить новую операцию?
- Нет
- Перечислите особенности перегрузки операций как методов класса. Чем отличается перегрузка внешним образом от перегрузки как метода класса?
- Первый параметр оператора как метода класса - всегда неявно *this. Внешним образом нельзя обратиться к private полям класса. По этой причине, видимо, оператор>>/<< делается friend'ом - так как там он фактически перегружается внешним образом.
- Какой результат должны возвращать операции с присваиванием?
- Ссылку на *this
- Как различаются перегруженная префиксная и постфиксная операции инкремента и декремента?
- Префиксная(++a): T & operator++(); Постфиксная(a++): T operator++(int); - с фейковым параметром чтобы как-то отличать
- Что означает выражение *this? В каких случаях оно используется?
- Разыменование указателя на текущий экземпляр. Например, чтобы вернуть объект :)
- Какие операции не рекомендуется перегружать как методы класса? Почему?
- Нужно перегружать только те, которые меняют private члены(типа +=, -= и т.д.). А вот уже +, - и т.д. - могут воспользоваться уже перегруженными +=, -=. Не рекомендуется перегружать ||, &&, так как по умолчанию они оптимальны - т.е. если установлена истинность одного аргумента, второй даже не обрабатывается.
- Какие операции разрешается перегружать только как методы класса?
- =, [], (), ->. Вопрос - почему?
Часть 2
- Дайте определение дружественной функции. Как объявляется дружественная функция? А как определяется?
- Дайте определение конструктора. Каково назначение конструктора? Перечислите отличия конструктора от метода.
- Сколько конструкторов может быть в классе? Допускается ли перегрузка конструкторов? Какие виды конструкторов создаются по умолчанию?
- Может ли конструктор быть приватным? Какие последствия влечет за собой объявление конструктора приватным?
- Приведите несколько случаев, когда конструктор вызывается неявно.
- Как проинициализировать динамическую переменную?
- Как объявить константу в классе? Можно ли объявить дробную константу?
- Каким образом разрешается инициализировать константные поля в классе?
- В каком порядке инициализируются поля в классе? Совпадает ли этот порядок с порядком перечисления инициализаторов в списке инициализации конструктора?
- Какие конструкции С++ разрешается использовать в списке инициализации качестве инициализирующих выражений?
- Какой вид конструктора фактически является конструктором преобразования типов?
- Для чего нужны функции преобразования? Как объявить такую функцию в классе?
- Как запретить неявное преобразование типа, выполняемое конструктором инициализации?
- Какие проблемы могут возникнуть при определении функций преобразования?
- Для чего служит ключевое слово explicit?
- Влияет ли наличие целочисленных констант-полей на размер класса?
- Разрешается ли объявлять массив в качестве поля класса. Как присвоить элементам массива начальные значения?
- Сколько операндов имеет операция индексирования []? Какой вид результата должна возвращать эта операция?
- Для чего нужны статические поля в классе? Как они определяются?
- Как объявить в классе и проинициализировать статический константный массив?
- Что такое выравнивание и от чего оно зависит? Влияет ли выравнивание на размер класса?
- Дайте определение контейнера.
- Какие виды встроенных контейнеров в С++ вы знаете?
- Какие виды доступа к элементам контейнера вам известны?
- Чем отличается прямой доступ от ассоциативного?
- Перечислите операции, которые обычно реализуются для последовательного доступа к элементам контейнера.
- Дайте определение итератора.
- Можно ли реализовать последовательный доступ без итератора? В чем преимущества реализации последовательного доступа с помощью итератора?
- Что играет роль итератора для массивов С++?
- Что такое деструктор? Может ли деструктор иметь параметры?
- Почему для классов-контейнеров деструктор надо писать явным образом?
- Допускается ли перегрузка деструкторов?
- Что такое «глубокое копирование» и когда в нем возникает необходимость?
- Какое копирование осуществляет стандартный конструктор копирования?
- Чем отличается копирование от присваивания?
- Объясните, почему в операции присваивания требуется проверка присваивания самому себе?
- Можно ли в качестве операции индексирования использовать операцию вызова функции ()? В чем ее преимущества перед операцией []?
- Почему необходимо писать два определения операции индексирования? Чем они отличаются?
- Дайте определение вложенного класса.
- Можно ли класс-итератор реализовать как внешний класс? А как вложенный? В чем отличия этих методов реализации?
- Может ли объемлющий класс иметь неограниченный доступ к элементам вложенного класса? А вложенный класс — к элементам объемлющего?
- Ограничена ли глубина вложенности классов?
- Можно ли определить вложенный класс внешним образом? Зачем это может понадобиться?
- Каким образом вложенный класс может использовать методы объемлющего класса? А объемлющий — методы вложенного?
- Что такое «запредельный» элемент, какую роль он играет в контейнерах?
Часть 3
- Объясните, по каким причинам трудно написать универсальный контейнер, элементы которого могут иметь произвольный тип.
- Назовите ключевые слова С++, которые используются для обработки исключений.
- Исключение — это:
- событие;
- ситуация;
- объект;
- ошибка в программе;
- прерывание;
- Каким образом исключение генерируется?
- Каковы функции контролируемого блока?
- Что обозначается ключевым словом catch?
- контролируемый блок;
- блок обработки исключения;
- секция-ловушка;
- генератор исключения;
- обработчик прерывания;
- Какого типа может быть исключение?
- Сколько параметров разрешается писать в заголовке секции-ловушки?
- Какими способами разрешается передавать исключение в блок обработки?
- Объясните, каким образом преодолеть ограничение на передачу единственного параметра в блок обработки.
- Почему нельзя выполнять преобразования типов исключений при передаче в секцию-ловушку?
- Напишите конструкцию, которая позволяет перехватить любое исключение.
- Могут ли контролируемые блоки быть вложенными?
- Зачем нужен «контролируемый блок-функция» и чем он отличается от обычного контролируемого блока?
- Перечислите возможные способы выхода из блока обработки.
- Каким образом исключение «передать дальше»?
- Сколько секций-ловушек должно быть задано в контролируемом блоке?
- Что такое «спецификация исключений»?
- Что происходит, если функция нарушает спецификацию исключений?
- Учитывается ли спецификация исключений при перегрузке функций?
- Что такое «иерархия исключений»?
- Существуют ли стандартные исключения? Назовите два-три типа стандартных исключений.
- Поясните «взаимоотношение» исключений и деструкторов.
- Объясните, зачем может понадобиться подмена стандартных функций завершения.
- Какие виды нестандартных исключений вы знаете?
- В чем отличие механизма структурной обработки исключений Windows от стандартного механизма?
- Какие две роли выполняет наследование?
- Какие виды наследования возможны в С++?
- Чем отличается модификатор доступа protected от модификаторов private и public?
- Чем открытое наследование отличается от закрытого и защищенного?
- Какие функции не наследуются?
- Сформулируйте правила написания конструкторов в производном классе.
- Каков порядок вызова конструкторов? А деструкторов?
- Можно ли в производном классе объявлять новые поля? А методы?
- Если имя нового поля совпадает с именем унаследованного, то каким образом разрешить конфликт имен?
- Что происходит, если имя метода-наследника совпадает с именем базового метода?
- Сформулируйте принцип подстановки.
Часть 4
- Когда выполняется понижающее приведение типов?
- Объясните, что такое «срезка» или «расщепление».
- Объясните, зачем нужны виртуальные функции.
- Чтобы перегрузить их поведение при наследовании.
- Что такое связывание?
- Чем «раннее» связывание отличается от «позднего»?
- Какие два вида полиморфизма реализованы в С++?
- Статический и динамический
- Дайте определение полиморфного класса.
- Может ли виртуальная функция быть дружественной функцией класса?
- Наследуются ли виртуальные функции?
- наследуются(иначе нафига они? :) ).
- Каковы особенности вызова виртуальных функций в конструкторах и деструкторах?
- Можно ли сделать виртуальной перегруженную операцию, например, сложение?
- Можно
- Может ли конструктор быть виртуальным? А деструктор?
- Как виртуальные функции влияют на размер класса?
- К размеру класса добавляется размер виртуальной таблицы функций.
- Как объявляется «чистая» виртуальная функция?
- В конце сигнатуры пишут =0;
- Дайте определение абстрактного класса.
- Абстрактный класс - класс, содержащий чисто абстрактные функции. У чисто абстрактного класса не может быть экзмепляра, но можно хранить на него указатель.
- Наследуются ли чистые виртуальные функции?
- Да
- Можно ли объявить деструктор чисто виртуальным?
- Чем отличается чистый виртуальный деструктор от чистой виртуальной функции?
- Зачем требуется определение чистого виртуального деструктора?
- Наследуется ли определение чистой виртуальной функции?
- Приведите классификацию целей наследования.
- Объясните разницу наследования интерфейса от наследования реализации.
- Назовите причины, требующие разделения программ на части.
- во-первых, просто декомпозиция, для меньшей путаницы
- во-вторых, для того чтобы уменьшить время компиляции
- Дайте определение термина «единица трансляции»?
- Чем отличается файл с исходным текстом от единицы трансляции?
- Существуют ли в С++ конструкции, позволяющие идентифицировать отдельный модуль?
- Какие способы сборки программы вы можете назвать?
- Что такое «объектный модуль»? Программа, которая «собирает» объектные модули в программу, называется _____________ ?
- В чем заключается отличие аргумента «файл» от <файл> в директиве #include?
- <file> - ищет в папках, которые указаны в свойствах какой-то переменной Include(в вижаке задается свойствами проекта), "file" - в текущей директории.
- Что такое ODR?
- One Definition Rule - принцип, по которому, переменная/класс/метод может быть опеределена только один раз в одной из единиц трансляции. При этом объявлять можно сколько угодно.
- Объясните, что такое «страж» включения и зачем он нужен.
- Это или #pragma once или #ifndef H_NAME #define H_NAME //код хедера #endif. Нужен чтобы соблюдать ODR.
- Является ли интерфейс класса его определением?
- Сколько определений класса может быть в единице трансляции?
- одно
- Сколько определений класса может быть в многофайловой программе?
- одно
- Чем отличаются стандартные заголовки <string>, <string.h> и <cstring>?
- <string> - строки C++, библиотеки STL. <string.h> - Строки C. <cstring> - то же, что <string.h>, но все обернуто в пространство имен std.
- Объясните суть идиомы Pimpl.
Часть 5
- Что такое делегирование и как его можно использовать для повышения степени инкапсуляции?
- Каким образом глобальную переменную, определенную в одной единице трансляции, сделать доступной в другой единице трансляции? А константу?
- Можно ли использовать слово extern при объявлении функций?
- Как локализовать объявление функции в файле?
- Чем отличается «внешнее» связывание от «внутреннего» связывания?
- Что такое «спецификации компоновки»?
- Какие объекты обладают внутренним связыванием по умолчанию?
- Какие области видимости имен вы знаете?
- Для чего используются пространства имен?
- Чем отличаются именованные и неименованные пространства имен?
- Могут ли пространства имен быть вложенными?
- Для чего применяются алиасы пространства имен?
- Как сделать члены пространства имен доступными в нескольких (в пределе — во всех) файлах программного проекта?
- Объясните разницу между статической и динамической инициализацией.
- В чем состоит проблема инициализации глобальных статических переменных?
- Какие элементы класса можно объявлять статическими?
- Можно ли объявить в классе статическую константу? А константный статический массив?
- А какие статические поля можно инициализировать непосредственно в классе?
- Как определяются статические поля? В какой момент работы программы выполняется инициализация статических полей?
- Сколько места в классе занимают статические поля ?
- Чем отличается статический метод от обычного?
- Какие методы класса не могут быть статическими?
- Какие применения статических полей вы можете привести? А каким образом применяются статические методы?
- Приведите структуру и принцип действия паттерна Singleton.
- Для чего предназначены шаблоны?
- Какие виды шаблонов в С++ вы знаете?
- Объясните термин «инстанцирование шаблона».
- В чем разница между определением и объявлением шаблона?
- Объясните назначение ключевого слова typename.
- Какие виды параметров разрешается задавать в шаблоне класса? А в шаблоне функции?
- Можно ли параметрам шаблона присваивать значения по умолчанию?
- Может ли параметром шаблона быть другой шаблон? Каковы особенности объявления параметра-шаблона?
- Что такое специализация шаблона? Объясните разницу между полной и частичной специализацией.
- Разрешается ли специализировать шаблон функции?
- Может ли класс-шаблон быть вложенным в другой класс-шаблон? А в обычный класс?
- Можно ли объявить в классе шаблонный метод? А шаблонный конструктор?
- Можно ли перегружать функцию-шаблон?
Часть 6
- Какие параметры функции-шаблона выводятся автоматически?
- Может ли шаблон класса быть наследником обычного класса? А обычный класс от шаблона?
- Объясните, что такое класс свойств (класс трактовок).
- Каким образом можно использовать возможность наследования обычного класса от шаблона?
- Может ли шаблонный конструктор быть конструктором по умолчанию?
- Для чего применяются директивы явного инстанцирования?
- Объясните, в чем состоят проблемы, возникающие при разделении шаблонного класса на интерфейс и реализацию?
- Что такое «модель явного инстанцирования» и как она работает?
- Может ли шаблонный класс иметь «друзей»?
- Какие проблемы возникают при объявлении дружественной функции для класса-шаблона?
- Разрешается ли определять в классе-шаблоне статические поля? А статические методы?
- Что такое «инициализация нулем»?
- Что является единицей памяти в С++? Какие требования к размеру единицы памяти прописаны в стандарте С++?
- В каких единицах выдает результат операция sizeof? Какие типы данных имеют размер 1?
- Какие три вида памяти входят в модель памяти С++?
- Сколько видов динамической памяти обеспечивает С++?
- Какие функции для работы с динамической памятью достались С++ по наследству от С? В какую библиотеку они включены?
- Какие функции выделяют память, и с помощью каких функций память освобождается?
- Какое важное отличие имеет функция calloc() от функции malloc()?
- Какие действия выполняют функции выделения памяти, если память не может быть выделена?
- Зависит ли объем выделенной памяти от типа указателя? Влияет ли выравнивание на объем выделяемой динамической памяти?
- Можно ли с помощью функции realloc() уменьшить объем выделенной памяти?
- Что произойдет, если функции free() передать в качестве аргумента нулевой указатель?
- В чем главное отличие объектно-ориентированного механизма new/delete от механизма malloc()/free()?
- Сколько существует форм new/delete? В чем их отличие?
- Какие типы являются POD-типами? Чем отличается работа механизма new/delete с POD-объектами и nonPOD-объектами?
- Какие функции выполняет обработчик new?
- Можно ли реализовать собственный обработчик new и «прицепить» его к механизму new/delete?
- В чем главное отличие объединения от других видов классов С++?
- Может ли объединение участвовать в иерархии наследования?
- Разрешается ли определять для объединения конструкторы и деструктор? А виртуальные функции?
- В чем похожи и чем отличаются объединение и размещающий new?
- Объясните, почему при использовании размещающего new нужно явным образом вызывать деструктор?
- Зачем нужны интеллектуальные указатели?
- Что такое «стратегия владения»? Сколько стратегий владения вы знаете?
- Какой интеллектуальный указатель реализован в стандартной библиотеке STL, и какую стратегию владения он реализует?
- Объясните, в чем преимущества и недостатки интеллектуальных указателей со счетчиком ссылок.
- Разрешается ли перегружать new и delete и какими способами?
- Опишите схему функции, перегружающей глобальную функцию new.
Часть 7
- Отличается ли реализация перегруженной функции new[]() для массивов от реализации «обычной» функции new()?
- Как вы думаете, почему функции new/delete, перегружаемые для класса, являются статическими?
- Зачем при перегрузке new/delete для класса нужно проверять размер запрашиваемой памяти?
- Объясните, чем определяется «динамичность» контейнеров?
- Что такое «стратегия распределения памяти», и какие стратегии выделения памяти вы знаете?
- Рассмотрите следующую стратегию распределения памяти: память выделяется для нескольких элементов блоками фиксированной длины, но блоки связываются в список. Для какого вида контейнера можно использовать такую стратегию?
- Какие операции можно перегрузить для доступа к элементам двумерного массива?
- В чем заключаются сложности использования операции индексирования [] для доступа к элементам двумерного массива?
- Каковы способы реализации операций с контейнерами?
- Какую конструкцию можно назвать «обобщенный алгоритм»?
- Каким образом объявить указатель на метод?
- Объясните разницу между указателем на функцию и указателем на метод.
- Каким образом получить адрес метода?
- Можно ли указателю на функцию присваивать адрес метода?
- Какие операции определены в С++ для косвенного вызова метода через указатель?
- Что такое «функтор»? Приведите пример функционального класса.
- Какими способами функтор вызывается?
- Можно ли использовать наследование при разработке функторов?
- Разрешается ли операцию вызова функции () определять как виртуальный метод? А как статический?
- В чем преимущества функторов перед указателями на функции?
- Объясните, зачем нужны адаптеры функторов? Какие виды адаптеров вы знаете?
- Как используются классы свойств при разработке функторов?
- Объясните, что такое «композиция» и приведите примеры?
- Объясните, чем отличается множественное наследование от простого?
- Приведите структуру и принцип действия паттерна Adapter.
- Сформулируйте основную проблему множественного наследования.
- Выполняется ли принцип подстановки при открытом множественном наследовании?
- Что такое виртуальное наследование? Каковы его преимущества и недостатки по сравнению с обычным наследованием?
- Может ли виртуальное наследование быть одиночным?
- Влияет ли виртуальное наследование на размер класса?
- Объясните, каким образом с помощью виртуального наследования можно вообще запретить наследование.
- Какие средства С++ составляют RTTI?
- Объясните разницу между повышающим, понижающим и перекрестным приведением.
- Какими свойствами должен обладать класс, чтобы с ним работал механизм RTTI?
- В чем приведение указателей отличается от приведения ссылок?
- Какие исключения связаны с механизмом RTTI?
- Что такое «поток» — дайте определение.
- Как классифицируются потоки, реализованые в библиотеках ввода/вывода С++?
- Что такое буферизация и зачем она нужна?
Часть 8
- Какие библиотеки ввода/вывода реализованы в С++ и чем они отличаются?
- Перечислите стандартные потоки и объясните их назначение.
- Зачем нужен процесс форматирования и когда он выполняется?
- Что такое «форматная строка», и в каких функциях она используется?
- Объясните назначение элементов спецификатора формата.
- Сколько спецификаторов формата может быть в форматной строке?
- Какой из элементов спецификатора формата не является умалчиваемым?
- Перечислите несколько известных вам обозначений типов в спецификаторе формата, и укажите их назначение.
- Сколько модификаторов типа вы знаете, и какую роль модификатор типа играет в спецификаторе формата?
- С помощью какого флага можно выровнять выводимое значение влево? А каким образом вывести ведущие нули?
- Какое действие оказывают на выводимую строку ширина, точнойть и флаги в спецификаторе формата?
- Для чего в спецификаторе формата может использоваться символ звездочка («*»)? Чем отличается действие этого символа при воде и при выводе?
- Каковы особенности ввода строк?
- Каким образом ограничить набор вводимых символов при вводе?
- Что является главной проблемой при использовании форматного ввода/вывода из библиотеки <cstdio>?
- Объясните, для чего нужны строковые потоки. Почему строковые потоки —всегда форматируемые?
- С помощью каких функций выполняется работа со строковыми потоками?
- Можно ли использовать тип string (и каким образом) со строковыми потоками?
- Объясните, в чем заключается различие между текстовым и двоичным файлом.
- Объясните, что означает «открыть» файл и «закрыть» файл?
- Каким образом внешний файл связывается с потоком?
- Можно ли один и тот же поток связать с разными файлами? А один и тот же файл с разными потоками?
- Перечислите режимы открытия файла. Чем отличается режим “r” от режима “a”?
- Какую роль в режиме открытия играет знак плюс («+»)?
- В каких случаях необходимо следить за ситуацией «конец файла»? Каким способом это делается?
- Можно ли текстовый файл открыть как двоичный? А двоичный — как текстовый?
- Какие функции ввода/вывода используются для обмена с текстовыми файлами?
- Перечислите функции ввода/вывода для работы с двоичными файлами.
- Какие функции реализованы в библиотеке <cstdio> для обеспечения прямого доступа к записям двоичного файла? Можно ли их использовать для работы с текстовыми файлами?
- Объясните назначение функции fseek().
- Чем отличается функция ftell() от функции fgetpos()?
Часть 9
- Объясните, что означает «перенаправление» потока? Какие потоки можно перенаправлять и куда?
- Каким образом перенаправление ввода можно использовать для ввода строк с пробелами?
- В чем преимущества объектно-ориентированной библитеки по сравнению с процедурной?
- В каких состояних может находиться поток? Каким образом отслживается состояние «конец потока»?
- Какие объектно-ориентированные потоки связаны со стандартными потоками?
- Чем отличаются объектно-ориентированные строковые потоки от процедурных строковых потоков?
- Каким образом строковые потоки можно использовать для ограничения ширины поля ввода? А можно ли с той же целью использовать строковые потоки <cstdio>?
- Сравните средства форматирования объектно-ориентированной и процедурной библиотеки.
- Каким образом ввести строку типа string с пробелами?
- Каково назначение флагов форматированя? Какие средства реализованы в библиотеке для работы с флагами форматирования?
- Что такое «манипулятор»? В чем преимущества манипуляторов перед флагами форматирования?
- Как связываются файлы с потоками в объектно-ориентированной библиотеке?
- Можно ли файлы, записанные функциями библиотеки <cstdio>, прочитать объектно-ориентированными средствами? А наоборот?
- Перечислите режимы открытия объектно-ориентированных файловых потоков. каким образом комбинируются режимы открытия файлоавых потоков?
- Обязательно ли закрывать файл, связанный с объектно-ориентированным файловым потоком? А открывать?
- Каким образом открыть файловый поток для чтения и записи одновременно?
- Как открыть файловый поток для дозаписи?
- Можно ли вывести значение переменной в двоичном виде и как это сделать?
- Разрешается ли наследовать от классов библиотеки ввода/вывода?
- Каким образом можно еренаправить объектно-ориентированный поток?
- Как используется буфер потока для копирования потока?
- Какими операциями выполняется форматированный ввод/вывод в файловые потоки? А неформатированный?
- Реализованы ли в объектно-ориентированной библиотеке средства прямого доступа к файловым потокам? Сравните их с аналогичными средствами библиотеки <cstdio>.
- С какими объектно-ориентированными потоками разрешается, и с какими не разрешается использовать средства прямого доступа?
- Покажите, каким образом можно выполнить перегрузку операций ввода/вывода для нового типа данных.
- Как выполняется обработка ошибок ввода/вывода в объектно-ориентированной библиотеке?
- Какое стандартное исключение генерируется при ошибках ввода/вывода? Обязательно ли оно генерируется?
- Чем стандартные широкие потоки отличаются от узких?
- Что такое — «локаль», и каково ее назначение?
- Как установить русский шрифт при выводе в консольное окно?
- Чем отличается ли ввод/вывод широких файловых потоков от узких?
- Перечислите все последовательные контейнеры стандартной библиотеки. Чем они отличаются друг от друга?
- Перечислите адаптеры последовательных контейнеров и дайте их подробную характеристику.
- Почему для адаптеров-очередей нельзя использовать вектор в качестве базового?
- Чем простая очередь queue отличается от приоритетной очереди priority_queue?
- Каким требованиям должны удовлетворять элементы контейнера?
- Могут ли быть указатели элементами контейнера? А итераторы?
- Почему нельзя использовать в качестве элементов контейнера стандартный интеллектуальный указатель auto_ptr?
- Зачем в контейнере list реализованы собственные методы сортировки поиска и слияния? Можно ли пользоваться соответствующими стандартными алгоритмами при обработке списка?
- Перечислите типовые виды конструкторов, с помощью которых можно создавать последовательный контейнер.
- Можно ли инициализировать контейнер элементами встроенного массива? А элементами другого контейнера? Какими способами это можно сделать?
- Почему конструктор инициализации, параметрами которого являются итераторы, сделан шаблонным во всех контейнерах?
- Какие методы реализованы в контейнере-векторе для доступа к элементам?
- Отличается ли функция at() доступа по индексу от перегруженной операции индексирования и чем?
- Перечислите методы контейнера deque, относящиеся к определению размеров контейнера.
- Чем метод size() отличается от метода capacity()? А в чем отличие этих методов от метода max_size()?
- Перечислите методы контейнера list, предназначенные для вставки удаления и замены элементов. Отличаются ли эти методы от соответствующих методов вектора и дека?
- Каким образом выполняются операции сравнения контейнеров?
Часть 10
- Разрешается ли изменять элемент ассоциативного контейнера, доступный в данный момент по итератору?
- Какие контейнеры называются ассоциативными и почему?
- Чем контейнер map отличается от контейнера multimap?
- Объясните, почему в ассоциативных контейнерах нельзя изменять элемент, доступный в данный момент по итератору.
- По каким причинам в контейнере-множестве не реализованы типовые операции объединения, пересечения, разности и другие?
- Как используется структура-пара в ассоциативных контейнерах?
- Объясните, что такое «критерий сортировки», и каким требованиям он должен удовлетворять? Какой критерий сортировки принят по умолчанию?
- Какими преимуществами обладает функция make_pair() по сравнению с конструктором pair()?
- Почему в контейнерах-отображениях операция индексирования перегружена, а в контейнерах-множествах — нет?
- Какие гарантии безопасности обеспечивают контейнеры стандартной библиотеки?
- Что такое «транзакционная гарантия безопасности» и чем она отличается от базовой?
- На какие 4 класса по надежности можно разделить все операции с контейнерами?
- Что такое «распределитель памяти» и зачем он нужен?
- Чем отличается битовый вектор bitset от битового вектора vector<bool>?
- Дайте определение итератора.
- Что такое «начальный» итератор и «конечный» итератор? Какие методы, связанные с итераторами, обязательно включает каждый контейнер?
- Чем константный итератор отличается от неконстантного?
- Объясните, что такое «недействительный» итератор. В каких случаях итераторы становятся недействительными?
- Какие категории итераторов вы знаете? Какие операции обязательно реализуются для всех категорий итераторов?
- К какому виду итераторов можно отнести встроенный указатель и почему?
- Какие вспомогательные функции для итераторов вы знаете? В каких случаях оправдано их применение?
- Какие адаптеры итераторов реализованы в библиотеке?
- Объясните, почему итераторы реализованы как вложенные классы в контейнерах.
- Чем отличаются итераторы вставки от обычных итераторов?
- Каким образом используются потоковые итераторы?
- Какие стандартные функторы реализованы в библиотеке STL? Каково их основное назначение?
- Для чего нужны адаптеры функторов bind1st() и bind2nd()?
- Как применяются адаптеры-отрицатели?
- Почему алгоритмы remove() не удаляют элементы из контейнеров? Как реально удалить элементы из контейнера?
- Чем отличается стабильная сортировка от обычной?
- Какую функцию выполняет алгоритмы unique()?
- Могут ли стандартные алгоритмы работать со строками?
- Нужно ли сортировать ассоциативные контейнеры?
- Можно ли алгоритмы для работы с множествами применять для последовательных контейнеров? При каких условиях?
- Какие алгоритмы предназначены для заполнения контейнера значениями? С какими контейнерами они могут работать?
- Каким образом заполнить с помощью алгоритма generate() последовательный контейнер, не имеющий ни одного элемента?
- Перечислите алгоритмы, предназначенные для операций с каждым элементом контейнера.
- Можно ли с помощью алгоритма for_each() изменить элементы контейнера?
PS Обращаю Ваше внимание на то, что это - базовый список. В него не включены вопросы, которые обсуждаются на лекциях, поэтому не стоит считать, что они не будут заданы Вам на экзамене.
С уважением, Ковалев Антон