Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ГОС информатика2.docx
Скачиваний:
41
Добавлен:
07.07.2019
Размер:
130.5 Кб
Скачать
  1. Перегрузка операций (операторов). Перегрузка бинарных операторов. Оператор-функция «присваивание».

Конструктор копий исп для создания новых объектов из уже существующих. Это означает, что, так же как для других конст-ов, новый объект еще не существует к моменту его вызова. Однако только конс-ру копий объект передается как аргумент по ссылке. Итак, синтаксис конс-ра копий прост. Кон-ор копий произвольного класса X выглядит так: Х(const X&) ; // кон-ор копий класса Х

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

Для перегрузки встроенных операторов С++ можно использовать ключевое слово operator. Ему может быть присвоен ряд значений, зависящих от параметров. Таким образом оператору типа + можно присвоить дополнительные значения. Это облегчает написание программ и делает их более читабельными. vect oprator *(const vect &,const matix &)где * является двухместным оператором умножения. matix t; vect s,r; s=t*r; // s=mpy(r,t); Перегруженный оператор можно вызвать и исп-ием функциональной формы записи: s=operator*(t,r);

Хотя операторам и могут добавляться новые значения, но их приоритет остается прежним. Например, операция умножения имеет более высокий приоритет, чем сложение. Перегружены могут все операторы. Нельзя использовать аргументы по умолчанию. Доступны все арифметические, логические операторы, операторы сравнения, равенство, присвоение, операторы поразрядных операций, префиксные и постфиксные формы операторов приращения и декремента. могут быть перегружены операторы индексации “[]” и обращения к функции “()”. Также могут быть перегружены оператор указателя класса “->“ и оператор указателя на член “->*”. Возможна перегрузка new, delete. Класс может предоставлять особые привилегии определенным внешним фун-ям или фун-ям-членам другого класса. Эти фун-ии получили назв-ия дружественных. Если фун-ия или класс объявлены как дружественные данному классу, то такие фун-ии или функции-члены такого класса могут осуществлять непосредственный доступ ко всем полям класса, для которого они дружественны. Дружественные фун-ии и классы могут осуществлять прямой доступ к закрытым полям класса без исп-я фун-ий-членов этого класса. Ключевое слово friend - спецификатор фун-ии, который дает фун-ии-не члену класса доступ к скрытым членам класса. Он используется для того, чтобы выйти за строгие рамки типизации и сокрытия данных в С++. Одна из причин их исп-ния состоит в том, что некоторые фун-ии нуждаются в привилегированном доступе более, чем к одному классу. 2-ая причина - friend-ф-ия передает все параметры через список параметров, и значение каждого из них подчинено преобразованию, совместимому с назначением. Такие преобразования применяются к явно переданным аргументам-классам и поэтому особенно полезны в случаях перегрузки оператора. Объявление friend ф-ции должно появляться внутри объявления класса, которому она дружественна. Имени ф-ции предшествует ключевое слово friend, и ее объявление может находится как в public так и в private части класса, что не повлияет на значение. Ф-ция-член одного класса может быть friend-ф-ией другого класса. Это происходит тогда, когда ф-ция-член объявлена в friend классе с испол-ием оператора разрешения контекста для определения имени ф-ции дружественного класса. По фу-ному назначению операция присваивания очень похожа на конс-тор копий. Принципиальное отличие состоит в том, что кон-тор копий создает новый объект, а операция присваивания работает с уже созданными. Вызывающий объект является левым операндом, объект-аргумент - правым. Операция присваивания также имеет соответствующий синтаксис. Операция присваивания - ф-ция-член и одновременно двухместная операция. В работу вовлечены 2 объекта. 1-ый объект - вызывающий, доступный по указателю this, а второй - это аргумент. Операция присваивания исп-ет в качестве аргумента постоянную ссылку. Для произвольного класса X мы имеем следующий синтаксис операции присваивания: X& operator = ( const X&); // синтаксис операции присваивания для произвольного класса. Присваивание - операция, значит мы должны исполь-ть ключевое слово operator и соответствующий символ операции. C++ допускает последовательные присваивания, так что это свойство надо сохранить, то необходимо возвращать ссылку на объект; в противном случае цепочка прервется. Итак, оператор-ф-ция принимает постоянную ссылку, а возвращает ссылку на объект. Испол-ие ключевого слова const позволяет ф-ции работать как с постоянными объектами, так и с переменными.