Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОП. Вопросы. v_1.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
37 Кб
Скачать
☆
  1. Введение в перегрузку операторов.

Перегрузка функций. Перегрузка конструкторов. Конструктор копирования. . Перегрузка и неоднозначность. Основы перегрузки операторов. Дружественные оператор-функции.

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

  2. Можно ли перегружать операции для встроенных типов данных?

  3. Можно ли при перегрузке изменить приоритет операции?

  4. Можно ли определить новую операцию?

  5. Перечислите особенности перегрузки операций как методов класса. Чем отличается перегрузка внешним образом от перегрузки как метода класса?

  6. Какой результат должны возвращать операции с присваиванием?

  7. Как различаются перегруженная префиксная и постфиксная операции инкремента и декремента?

  8. Что означает выражение *this? В каких случаях оно используется?

  9. Какие операции разрешается перегружать только как методы класса?

  10. Дайте определение дружественной функции. Как объявляется дружественная функция? А как определяется?

  11. Дайте определение конструктора. Каково назначение конструктора? Перечислите отличия конструктора от метода.

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

  13. Может ли конструктор быть приватным? Какие последствия влечет за собой объявление конструктора приватным?

  14. Приведите несколько случаев, когда конструктор вызывается неявно.

  15. Как проинициализировать динамическую переменную?

  16. Как объявить константу в классе? Можно ли объявить дробную константу?

  17. Каким образом разрешается инициализировать константные поля в классе?

  18. В каком порядке инициализируются поля в классе? Совпадает ли этот порядок с порядком перечисления инициализаторов в списке инициализации конструктора?

  19. Разрешается ли объявлять массив в качестве поля класса. Как присвоить элементам массива начальные значения?

  20. Сколько операндов имеет операция индексирования []? Какой вид результата должна возвращать эта операция?

  21. Что такое деструктор? Может ли деструктор иметь параметры?

  22. Допускается ли перегрузка деструкторов?

  23. Что такое «глубокое копирование» и когда в нем возникает необходимость?

  24. Какое копирование осуществляет стандартный конструктор копирования?

  25. Чем отличается копирование от присваивания?

  26. Объясните, почему в операции присваивания требуется проверка присваивания самому себе?

  27. Можно ли в качестве операции индексирования использовать операцию вызова функции ()? В чем ее преимущества перед операцией []?

  1. .Перегрузка операций:

  1. преобразовывает операции(operator) C++ для работы с объектами;

  2. предоставляет операциям C++ больше, чем они могут обработать;

  3. дает новое значение существующим в C++ операциям;

  4. создает новые операции C++.

  1. Предположим, что класс X не использует перегруженные операции. Напишите выражение, в котором вычитается объект x1 класса X из другого объекта x2 этого же класса. Результат помещается в x3.

  1. Предположим, что класс X включает в себя процедуру перегрузки операции -. Напишите выражение, которое будет выполнять те же действия, что и выражение, описанное в вопросе 2.

  2. Истинно ли следующее утверждение: операция >= может быть перегружена?

  1. Сколько аргументов требуется для определения перегруженной унарной операции

  1. Предположим, что существует класс C с объектами obj1, obj2 и obj3. Выражение obj3=obj1-obj2 работает правильно. Здесь перегруженная операция должна:

  1. принимать два аргумента;

  2. возвращать значение;

  3. создавать именованный временный объект;

  4. использовать объект, вызвавший операцию, как операнд.

  1. Чем отличается действие перегруженной операции ++ при ее использовании в префиксной форме от использования в постфиксной форме?

  1. Вот два объявления, предназначенные для складывания двух объектов класса String:

void add (String s1, string s2)

String operator + (String s)

Рассмотрим, какие из элементов первого объявления соответствуют элементам второго. Заполните пробелы подходящими вариантами:

  • Имени функции (add) соответствует_________  .

  • Возвращаемому значению (типа void) соответствует________ .

  • Первому аргументу (s1) соответствует__________ .

  • Второму аргументу (s2) соответствует____________ .

  • Объекту, вызвавшему функцию, соответствует___________.

  1. аргумент (s);

  2. объект, вызывающий операцию;

  3. операция (+);

  4. возвращаемое значение (типа String);

  5. нет соответствия для этого элемента.

  1. Истинно ли следующее утверждение: перегруженная операция всегда требует на один аргумент меньше, чем количество операндов?

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

  1. передается объекту справа от операции;

  2. передается объекту слева от операции;

  3. передается объекту, вызвавшему операцию;

  4. должен быть возвращен.

  1. Истинно ли следующее утверждение: выражение objA=objB будет причиной ошибки компилятора, если объекты разных типов?

  1. Истинно ли утверждение о том, что дружественная функция имеет доступ к скрытым данным класса, даже не являясь его методом?

  1. Дружественная функция может быть использована для того, чтобы:

  1. разные классы могли пользоваться одними аргументами;

  2. разрешать доступ к классам, исходный код которых недоступен;

  3. разрешать доступ к несвязанному классу;

  4. увеличить многосторонность применения перегружаемой операции.

  1. Напишите описатель дружественной функции harry(), возвращающей результат типа void и имеющей один аргумент класса george.

  1. Ключевое слово friend появляется в:

  1. классе, разрешающем доступ к другому классу;

  2. классе, требующем доступа к другому классу;

  3. разделе скрытых компонентов класса;

  4. разделе общедоступных компонентов класса.

  1. Статическая функция:

  1. должна вызываться, когда объект уничтожается;

  2. сильно связана с индивидуальным объектом класса;

  3. может быть вызвана с использованием имени класса и имени функции;

  4. используется для создания простого объекта.

  1. Объясните, что делает по умолчанию оператор присваивания = в применении к объектам.

  1. Оператор присваивания может быть перегружен с целью:

  1. хранения информации о количестве одинаковых объектов;

  2. присваивания идентификационного номера каждому объекту;

  3. проверки того, что все компонентные данные скопировались без ошибок;

  4. уведомления о том, что имело место присваивание.

  1. Операции, выполняемые оператором присваивания и конструктором копирования:

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

  2. похожи, за исключением того, что оператор присваивания копирует компонентные данные; 

  3. различны, за исключением того, что оба создают новый объект;

  4. различны, за исключением того, что оба копируют компонентные данные.

  1. Истинно ли утверждение о том, что конструктор копирования может быть переопределен с целью копирования только части данных объекта?

  1. Объясните разницу в выполнении следующих двух выражений:

person p1(p0);

person p1 = p0;

  1. Конструктор копирования запускается, когда:

  1. функция возвращается по значению;

  2. аргумент передается по значению;

  3. функция возвращается по ссылке;

  4. аргумент передается по ссылке.