Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЭКЗ_2020_ООП.odt
Скачиваний:
23
Добавлен:
23.06.2020
Размер:
217.5 Кб
Скачать

15. Что такое указатель на функцию и как он может быть использован?

Указатель на функцию (function pointer) хранит адрес функции. По сути указатель на функцию содержит адрес первого байта в памяти, по которому располагается выполняемый код функции.

Используется для вызова функции через указатель на функцию и для передачи функции как параметр в другую функцию

16. Какие способы группировки данных в С++ вам известны?

контейнеры stl(vector, set, map), class, struct, union, enum,

17. Для чего предназначены структуры?

Структуры полезны, когда нам надо объединить несколько переменных с разными типами под одним именем. Это делает программу более компактной и более гибкой для внесения изменений.

18. Где может быть определена структура или класс?

Структуру и класс можно определить до функции main или внутри другого класса. Класс, объявленный внутри другого класса, называется вложенным.

19. Допустимо ли использование указателей/ссылок/массивов структур?

Массивы структур — да

Указатели на структуру — Да

Ссылки на структуру - ? (Да, но это не точно)

20. Какие существуют способы передачи параметров в функцию?

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

21. Для чего предназначены классы, в чем их отличие от структур?

В языке С++ расширены возможности структуры, если сравнивать их с языком С. В С++ классы и структуры тесно взаимосвязаны. Фактически, за одним исключением, они взаимозаменяемы, по­скольку структура в С++ может включать как данные, так и код, который может манипулировать этими данными таким же образом, как и класс. Структуры также могут содержать конструкторы и деструкторы. Единственное отличие между ними связано с тем, что по умолчанию члены класса имеют в качестве спецификатора доступа private, тогда как спецификатором доступа членов струк­туры служит public. Согласно формальному синтаксису С++, ключевое слово struct определяет тип класса.

22. Что такое выравнивание памяти в структурах и классах?

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

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

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

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

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

24. В чем отличие функций от методов?

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

Метод же для своей работы может использовать поля объекта и/или класса, в котором определен, напрямую, без необходимости передавать их во входных параметрах. Это похоже на использование глобальных переменных в функциях, но в отличие от глобальных переменных, метод может получать прямой доступ только к членам класса. Метод привязан к классу, если он статический, или объекту и может быть вызван только через этот класс или объект.

25. В каких случаях используются значения по умолчанию в функциях?

Если пользователь не ввел соответствующие аргументы функции, то используются аргументы по умолчанию, если они есть. Это можно использовать для перегрузки функции избегая при этом дублирования кода.

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

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

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

public, private и protected

  • Public — доступ открыт всем, кто видит определение данного класса.

  • Private — доступ открыт самому классу (т.е. функциям-членам данного класса) и друзьям (friend) данного класса, как функциям, так и классам.

  • Protected — доступ открыт классам, производным от данного.

28. Что такое геттеры и сеттеры?

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

Функция доступа — это короткая открытая функция, задачей которой является получение или изменение значения закрытой переменной-члена класса.

Геттеры — это функции, которые возвращают значения закрытых полей класса.

Сеттеры — это функции, которые позволяют присваивать значения закрытым полей класса.

29. Где применяется неявный указатель this?

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

Указатель this удобно использовать, например, в конструкторах, когда имена передаваемых параметров совпадают с именами полей класса.

30. Для чего используется ключевое слово const?

1. Позволяет задать константность объекта 2. Позволяет задать константность указателя 3. Позволяет указать, что данный метод не модифицирует члены класса, т.е. сохраняет состояние объекта

31. Что такое константные ссылки/указатели, указатели/ссылки на константу?

Const int *first_ptr = &a; // Указатель на константу

Недопустимо изменения содержания (//ERROR: *first_ptr = 10). Но разрешается изменения указателя (// first_ptr = NULL)

int * const point = &a // Константный указатель

Допустимо изменения содержания (// *point = 10). Но не разрешено изменять указатель

(// ERRER: point = NULL)

32. В чем отличие синтаксической и логической константности методов?

• Синтаксическая – константные методы не могут модифицировать поля (обеспечивается компилятором)

• Логическая – запрещено изменение данных, определяющих состояние объекта в константных методах

33. Для чего используется ключевое слово default?

С помощью default пользователь может указать компилятору реализовать ту или иную функцию-член класса по-умолчанию. Это полезно так как реализация по-умолчанию более эффективна, чем реализация определенная пользователем.

34. Для чего используется ключевое слово mutable?

Позволяет определять поля доступные для изменения внутри

константных методов. Можно использовать только с полями не являющимися частью

состояния объекта.

35. Какие методы в классе генерируются компилятором?

Методы, генерируемые компилятором

• Конструктор по умолчанию

• Конструктор копирования

• Конструктор перемещения

• Операторы присваивания

• Деструктор

• Запретить создание можно спецификатором delete

36. Что такое конструктор?

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

В отличие от обычных методов, конструкторы имеют определённые правила по поводу их имён:

Конструкторы не имеют типа возврата.

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