1679
правок
Изменения
→Классы
__TOC__
== Классы , контейнеры ==
# Что определяет класс? Чем обличается класс от объекта?
#: Класс определяет тип объекта, а объект - это конкретный экземпляр класса.
# Дайте определение дружественной функции. Как объявляется дружественная функция? А как определяется?
# Дайте определение конструктора. Каково назначение конструктора? Перечислите отличия конструктора от метода.
#: Конструктор - функция, которая вызывается при просто объявлении(конструктор по умолчанию) или инициализации объекта. Назначение - получать объект класса с какими-то начальными параметрами. Конструктор для данного можно вызвать только один раз.
# Сколько конструкторов может быть в классе? Допускается ли перегрузка конструкторов? Какие виды конструкторов создаются по умолчанию?
#: Сколько угодно. Допускается. По умолчанию создается пустой конструктор и конструктор копирования.
# Может ли конструктор быть приватным? Какие последствия влечет за собой объявление конструктора приватным?
#: Может. Последствия - объект не может быть сконструирован этим конструктором извне.
# Приведите несколько случаев, когда конструктор вызывается неявно.
#: bigint a;(вызван пустой конструктор)
#: bigint a = "123214";(вызван конструктор от string)
#: bigint a = 10;(вызван конструтор от long long)
# Как проинициализировать динамическую переменную?
#: T* t = new T();
# Как объявить константу в классе? Можно ли объявить дробную константу?
#: Просто взять и объявить. Да.
# Каким образом разрешается инициализировать константные поля в классе?
#: Инициализировать ее можно только через список инициализации. Можно еще static const, ее нужно инициализировать сразу при объявлении
# В каком порядке инициализируются поля в классе? Совпадает ли этот порядок с порядком перечисления инициализаторов в списке инициализации конструктора?
# Какие конструкции С++ разрешается использовать в списке инициализации качестве инициализирующих выражений?
# Какие проблемы могут возникнуть при определении функций преобразования?
# Для чего служит ключевое слово explicit?
#: Чтобы не позволить вызвать конструктор от одного аргумента неявно.
# Влияет ли наличие целочисленных констант-полей на размер класса?
# Разрешается ли объявлять массив в качестве поля класса. Как присвоить элементам массива начальные значения?
# Сколько операндов имеет операция индексирования []? Какой вид результата должна возвращать эта операция?
#: Операции индексирования нужен один аргумент - индекс. Возвращать T или T& в зависимости от того, можно ли менять объект.
# Для чего нужны статические поля в классе? Как они определяются?
# Как объявить в классе и проинициализировать статический константный массив?
# Что играет роль итератора для массивов С++?
# Что такое деструктор? Может ли деструктор иметь параметры?
#: Деструктор - то что будет вызвано после того, как объект выходит из своей области видимости для того, чтобы корректно освободить то, что выделяли в динамической памяти.
# Почему для классов-контейнеров деструктор надо писать явным образом?
#: Потому что там используется динамическая память.
# Допускается ли перегрузка деструкторов?
# Что такое «глубокое копирование» и когда в нем возникает необходимость?
#: Если мы копируем объект, в котором есть поле-указатель, надо скопировать объект, на который указывает тот указатель, а не просто указатель.
# Какое копирование осуществляет стандартный конструктор копирования?
#: Неглубокое.
# Чем отличается копирование от присваивания?
#: Копирование - инициализация. Присваивание - замена уже существующего объекта.
# Объясните, почему в операции присваивания требуется проверка присваивания самому себе?
# Можно ли в качестве операции индексирования использовать операцию вызова функции ()? В чем ее преимущества перед операцией []?