Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы по ООП 2023 / Вопросы к экзамену С ОТВЕТАМИ.docx
Скачиваний:
0
Добавлен:
09.09.2026
Размер:
78 Кб
Скачать
  1. В чем особенности вызова конструкторов базового класса из производного?

Конструктор производного класса в первую очередь всегда должен вызывать конструктор базового класса. Если это действие не выполняется явно, то по умолчанию вызывается конструктор без параметров (если он есть, если его нет, будет ошибка). Если класс имеет несколько базовых, то конструкторы базовых классов должны вызываться в порядке перечисления этих классов в списке базовых.

  • Необходимо явно вызывать конструктор базового класса в списке инициализации

Ключевое слово using

  • Позволяет не переопределять каждую перегруженную функцию базового класса

  • Позволяет задать использование базового конструктора в качестве дочернего

  • Позволяет изменять спецификатор доступа функций

Группа 2

  1. Что такое std::ref и std::reference_wrapper? Для чего нужны?

std::reference_wrapper<T> это копируемый и присваиваемый объект, имитирующий ссылку (T&). Это дает ненулевую гарантию ссылки и гибкость, подобную указателю, при повторной привязке к другому объекту.

Обычный способ создать std::reference_wrapper<T> - через std::ref

  • Функция ref создает объект типа reference_wrapper

  • reference_wrapper является оболочкой над ссылкой

  • reference_wrapper можно копировать и присваивать

  • Позволяют хранить ссылки в массиве и контейнерах

  • Функция cref создает константную ссылку

  1. Что такое паттерны проектирования?

Паттерны (шаблоны) проектирования — это способы построения программ, которые считаются хорошим тоном для разработчиков. Их еще называют шаблонами или образцами: чаще всего паттерн — это типовое решение для часто встречающейся задачи на построение.

  • Архитектурное решение часто встречающихся проблем

  1. Что такое объявление класса? Как компилируется класс?

Объявление класса начинается с зарезервированного ключевого слова class, после которого пишется имя класса. В фигурных скобочках объявляется тело класса. В теле класса объявляются три метки спецификации доступа, после каждой метки нужно обязательно ставить двоеточие.

  1. Что такое неявный указатель this?

Ключевое слово this представляет собой неявно определенный указатель на сам объект. С его помощью метод класса определяет, с данными какого объекта ему предстоит работать. Каждый метод класса неявно содержит в качестве поля данных указатель.

  1. Что такое перегрузка метода класса?

Определение нескольких функций с одинаковым именем, но отличающимся списком параметров (типами и/или количеством). Статический полиморфизм.

  1. Где и как можно объявлять и определять классы?

Как в 1 файле, так и в разных файлах с помощью ключевого слова class.

  1. Что такое публичный интерфейс класса?

Открытый интерфейс предназначен для пользователей класса и включает открытые функции-члены, а также открытые базовые классы и друзей класса.

  • Публичный интерфейс – список методов, доступный внешним пользователям класса

  1. Что такое инвариант класса?

Инвариант класса — это множество условий, сохраняющих свою истинность на протяжении всего времени жизни экземпляра класса.

  • Инвариант класса – набор утверждений, которые должны быть истинны применительно к любому объекту данного класса в любой момент времени, за исключением переходных процессов в методах объекта

  • Для сохранения инварианта класса:

    • Все поля должны быть закрытыми

    • Публичные методы должны сохранять инвариант

  1. Какие методы класса генерируются компилятором? Как можно явно указать, чтобы метод сгенерировался по умолчанию?

Конструктор, деструктор, конструктор копирования, конструктор перемещения, оператор присваивания, оператор присваивания перемещения.

void myMethod() = default;

  1. Какой порядок расположения полей объекта класса в памяти? В каком порядке они инициализируются?

До C++23 они хранятся в порядке объявления только если спецификатор доступа (public/private/protected) у них одинаковый.

Если спецификатор доступа одинаковый, то из двух полей в памяти идет раньше то, которое в определении класса написано выше. Если спецификатор доступа у двух полей разный, то компилятор вправе расположить их относительно друг друга как угодно.

В частности, соответствующий стандарту компилятор может располагать все поля в памяти по порядку, игнорируя спецификаторы доступа. А может сложить в кучку отдельно private, protected и public. Могут быть какие-то другие варианты.

  1. Что такое конструктор копирования? Для чего он нужен? В каких случаях он вызывается неявно?

Конструктор копирования – это специальный конструктор, который позволяет получить идентичный к заданному объект. То есть, с помощью конструктора копирования можно получить копию уже существующего объекта.

Передача экземпляра класса в функцию.

  • Позволяет определить, каким образом будет происходить копирование объекта класса

  • Правило: если определен конструктор копирования, то необходимо реализовать оператор присваивания с копированием

Соседние файлы в папке Лабы по ООП 2023