Изменения

Перейти к: навигация, поиск

Старые вопросы на экзамен по C++

1440 байт добавлено, 09:10, 16 июня 2011
Классы, контейнеры
# Какие конструкции С++ разрешается использовать в списке инициализации качестве инициализирующих выражений?
# Какой вид конструктора фактически является конструктором преобразования типов?
#: Видимо, любой неявный констркутор.
# Для чего нужны функции преобразования? Как объявить такую функцию в классе?
# Как запретить неявное преобразование типа, выполняемое конструктором инициализации?
#: Для этого есть ключевое слово explicit
# Какие проблемы могут возникнуть при определении функций преобразования?
# Для чего служит ключевое слово explicit?
# Влияет ли наличие целочисленных констант-полей на размер класса?
# Разрешается ли объявлять массив в качестве поля класса. Как присвоить элементам массива начальные значения?
#: Разрешается, надо написать что-нибудь вроде int a[] = {1, 2, 3};
# Сколько операндов имеет операция индексирования []? Какой вид результата должна возвращать эта операция?
#: Операции индексирования нужен один аргумент - индекс. Возвращать T или T& в зависимости от того, можно ли менять объект.
# Для чего нужны статические поля в классе? Как они определяются?
#: Это какие-то параметры класса. Определяются с помощью ключевого слова static
# Как объявить в классе и проинициализировать статический константный массив?
# Что такое выравнивание и от чего оно зависит? Влияет ли выравнивание на размер класса?
# Дайте определение контейнера.
# Какие виды встроенных контейнеров в С++ вы знаете?
#: vector, deque, set, map, list
# Какие виды доступа к элементам контейнера вам известны?
# Чем отличается прямой доступ от ассоциативного?
# Перечислите операции, которые обычно реализуются для последовательного доступа к элементам контейнера.
#: Видимо, инкремент итератора.
# Дайте определение итератора.
# Можно ли реализовать последовательный доступ без итератора? В чем преимущества реализации последовательного доступа с помощью итератора?
# Что играет роль итератора для массивов С++?
#: Хм, указатели, видимо.
# Что такое деструктор? Может ли деструктор иметь параметры?
#: Деструктор - то что будет вызвано после того, как объект выходит из своей области видимости для того, чтобы корректно освободить то, что выделяли в динамической памяти.
#: Неглубокое.
# Чем отличается копирование от присваивания?
#: Копирование - инициализацияобъектом того же типа. Присваивание - замена уже существующего объекта.
# Объясните, почему в операции присваивания требуется проверка присваивания самому себе?
# Можно ли в качестве операции индексирования использовать операцию вызова функции ()? В чем ее преимущества перед операцией []?
#: Можно впринципе. Плюс, видимо, в том что можно передавать сколько хочешь аргументов.
# Почему необходимо писать два определения операции индексирования? Чем они отличаются?
#: Первое определение возвращает ссылку на элемент, которых храним в контейнере, для того чтобы можно было его изменять.
#: T operator[](size_t index);
# Дайте определение вложенного класса.
#: Класс внутри класса(and we need to go deeper :) )
# Можно ли класс-итератор реализовать как внешний класс? А как вложенный? В чем отличия этих методов реализации?
# Может ли объемлющий класс иметь неограниченный доступ к элементам вложенного класса? А вложенный класс — к элементам объемлющего?
#: Я пока не очень понимаю, как иметь допуск не к static элементам. Надо получше про это узнать.
# Ограничена ли глубина вложенности классов?
#: ?? Где про это можно узнать?
# Можно ли определить вложенный класс внешним образом? Зачем это может понадобиться?
#: Да. Зачем - непонятно.
# Каким образом вложенный класс может использовать методы объемлющего класса? А объемлющий — методы вложенного?
#: Я пока не очень понимаю, как иметь допуск не к static элементам. Надо получше про это узнать.
# Что такое «запредельный» элемент, какую роль он играет в контейнерах?
#: В стандартных контейнерах это end(), используется для обозначения конца контейнера, возвращения в случае неудачного поиска, и т.д.
# Объясните, по каким причинам трудно написать универсальный контейнер, элементы которого могут иметь произвольный тип.

Навигация