Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вопросы для экзамена по курсу ООП.doc
Скачиваний:
4
Добавлен:
21.04.2019
Размер:
180.22 Кб
Скачать
  1. Перегрузка операций.

Можно перегружать любые операции, существующие,в С++, за исключением:

.* ?: :; # # sizeof

Перегрузка операций осуществляется с помощью методов специального вида {функций-операций) и подчиняется следующим правилам:

  • при перегрузке операций сохраняются количество аргументов, приоритеты операций и правила ассоциации (справа налево или слева направо), исполь­зуемые в стандартных типах данных;

  • для стандартных типов данных переопределять операции нельзя;

  • функции-операции не могут иметь аргументов по умолчанию;

  • функции-операции наследуются (за исключением =);

  • функции-операции не могут определяться как static.

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

Функция-операция содержит ключевое слово operator, за которым следует знак переопределяемой операции: тип operator операция ( список параметров) { тело функции }

Перегрузка унарных операций

Унарная функция-операция, определяемая внутри класса, должна быть пред­ставлена с помощью нестатического метода без параметров, при этом операндом является вызвавший ее объект, например:

Перегрузка бинарных операций

Бинарная функция-операция, определяемая внутри класса, должна быть пред­ставлена с помощью нестатического метода с параметрами, при этом вызвавший ее объект считается первым операндом:

Перегрузка операции присваивания

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

Перегрузка операции приведения типа

Можно определить функции-операции, которые будут осуществлять преобразо­вание объекта класса к другому типу.

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

Перегрузка операции вызова функции

Класс, в котором определена операция вызова функции, называется функцио­нальным.

Перегрузка операции индексирования

Операция индексирования [] обычно перегружается, когда тип класса представ­ляет множество значений, для которого индексирование имеет смысл. Операция индексирования должна возвращать ссылку на элемент, содержащийся в множе­стве. Перегруженная операция индексирования получает целый аргумент и проверяет, лежит ли его значение в пределах диапазона массива. Если да, то возвращается ад­рес элемента, что соответствует семантике стандартной операции индексирования.