Вы на НеОфициальном сайте факультета ЭиП

На нашем портале ежедневно выкладываются материалы способные помочь студентам. Курсовые, шпаргалки, ответы и еще куча всего что может понадобиться в учебе!
Главная Контакты Карта сайта
 
Где мы?
» » » ДРУЖЕСТВЕННЫЕ ФУНКЦИИ И КЛАССЫ. ПЕРЕГРУЗКА ОПЕРАЦИЙ

Реклама


ДРУЖЕСТВЕННЫЕ ФУНКЦИИ И КЛАССЫ. ПЕРЕГРУЗКА ОПЕРАЦИЙ

Просмотров: 2046 Автор: admin

Операции над классами. Перегруженные операции

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

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

По количеству операндов операции разделяются на унарные, бинарные и тернарную. Есть операции, которые могут быть как унарными, так и бинарными, в зависимости от числа операндов, например, операция * для двух операндов означает умножение, для одного – взятие значения по адресу, а & для двух операндов означает поразрядное умножение, для одного – взятие адреса.

Для каждой операции определен ранг и порядок выполнения.

Над классами можно назначить операции, аналогичные стандартным операциям над простыми типами данных (сложение, вычитание, умножение, деление и т.д.). Логический смысл этих операций для нестандартных типов данных очевиден. Например, операции сложения, вычитания векторов и матриц выглядят при записи так же, как подобные операции для простых чисел, операция сложения для строк может присоединить вторую строку в конец первой. При работе с объектами подобные стремления возникают часто, например, естественно вычитать объекты «Время (часы, минуты, секунды)», чтобы узнать разницу. При измерении углов можно складывать, вычитать значения углов, измеренных в градусах и минутах.

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

Для перегрузки операций используются специальные функции, которые называются операции-функции.

Определение операции-функции

Новое поведение операции необходимо определить с использованием операции-функции следующим образом:

Тип_возвращаемого_значения operator знак_операции (список_параметров)

{

// тело операции-функции;

}

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

Это синтаксис обычного определения функции с необычным именем. Имя операции-функции задают ключевое слово operator и следующий за ним знак операции, например, operator + расширяет действие стандартной операции сложения.

В общем виде, если используется класс Primer, то распространение произвольной операции @ на объекты класса объявляется функцией

Primer operator @ (Primer &x, Primer &y)            //x,y – аргументы операции

{

// Описание алгоритма операции для объектов x и y класса Primer

}

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

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

Количество параметров у операции-функции зависит от арности операции и способа определения функции (их три):

1)    внешняя функция, у которой хотя бы один параметр имеет тип класс (или ссылка на класс);

2)    функция, дружественная классу;

3)    внутренняя функция класса.

Наибольшим числом недостатков обладает первый способ. Главный из них – это отсутствие доступа к закрытым полям класса. Если этот способ используется, то класс должен обладать открытыми методами, предоставляющими такой доступ.

 

Скачать  ДРУЖЕСТВЕННЫЕ ФУНКЦИИ И КЛАССЫ. ПЕРЕГРУЗКА ОПЕРАЦИЙ druzhestvennye-funkcii-i-klassy.doc [245,5 Kb] (cкачиваний: 39)


Информация

Комментировать статьи на нашем сайте возможно только в течении 60 дней со дня публикации.

Популярные новости

Статистика сайта



Rambler's Top100



 
Copyright © НеОфициальный сайт факультета ЭиП