Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Перегрузка операций (операторов). Понятие перегрузки операторов. Синтаксис перегрузки операции. Перегрузка бинарных операторов.

Читайте также:
  1. I. Что подпадает под понятие "гражданские права и обязанности"?
  2. II. Исключить «лишнее» понятие
  3. А) Конституция как понятие и как идея
  4. А) Понятие бредовой идеи
  5. А) Понятие внесознательного механизма
  6. А) ПОНЯТИЕ ЖИЗНИ У ГУССЕРЛЯ И ГРАФА ЙОРКА
  7. А) ПОНЯТИЕ ИГРЫ

В C++ существует возможность перегрузить не только функции, но и операции внутри класса, например, можно добиться того, чтобы операция * при работе с матрицами осуществляла умножение матриц, а при работе с комплексными числами — умножение комплексных чисел.

Суть перегрузки операций — одна операция используется с различными типами данных. В C++, например, при помощи операции + можно сложить комплексные числа, матрицы или символьные строки.

Пример: (4 - j4) + (5 + j10); (15 20' SY45"SY) + (53 57' 40"); "combine" + "strings"

В C++ можно перегружать множество операций. Например:+,-,/,*,=,<,>,== и мн. др.

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

Для перегрузки операций внутри класса нужно написать специальную функцию — метод класса. При перегрузке операций следует помнить следующее:

· нельзя поменять приоритет операций;

· нельзя изменить тип операции (из унарной операции нельзя сделать бинарную или наоборот);

· перегруженная операция является членом класса и может использоваться только в выражениях с объектами своего класса;

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

· запрещено перегружать операции:. (доступ к членам класса), унарную операцию * (значение по адресу указателя),:: (расширение области видимости),?: (операция if);

· допустима перегрузка следующих операций: +, -, *, /, %, =, <, >, +=, -=, *=, /=, &&, ||, ++, —, (), [], new, delete.

 

В общем случае ваши программы могут перегрузить почти все операторы С++. В табл. перечислены операторы, которые C++ не позволяет перегружать.

Оператор Назначение Пример

 

. Выбор элемента object.member

.* Указатель на элемент object.*member

:: Разрешение области видимости classname::member

?: Условный оператор сравнения с = (а > b)? а: b;

# Препроцессорный символ

## Препроцессорный символ

Компилятор использует перегрузку операций без участия пользователя.

Существует строго определённый синтаксис для перегрузки операций. Сама перегрузка использует ключевое слово operatorX, где X – это символ перегруж.операции.

Пример:

Point pt1, pt2, pt3;

//Вызов перегр-го оператора сложения

Pt=pt1.operator+(pt2);

Синтаксис перегрузки операции.

Синтаксис перегрузки операторов очень похож на определение функции с именем operator@, где @ — это идентификатор оператора (например +, -, <<, >>).

Для перегрузки операции используется ключевое слово operator, за которым следует сама операция:

тип operator операция (список параметров)

Например:

angle_value operator +(angle_argument);

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

angle_value angle1("37° 15' 56\"");

angle_value angle2("10° 44' 44\"");

angle_value sum_of_angles;

sum_of_angles =angle1+ angle2;

Как уже упоминалось в предыдущих примерах, для обозначения угловых секунд используется символ двойных кавычек ("). Этот же символ означает начало и конец символьной строки.

Перегрузка бинарных операторов.

Замечание: Перегрузка унарных и бинарных отличается. т.к. унарные операции используются реже. Общий синтаксис перегрузки бинарных:

< возвр_тип > operatorX(< тип_пар >par);

Рассмотрим синтаксис перегрузки бинарных операторов. Перегрузим один оператор, который возвращает l-значение, один условный оператор и один оператор, создающий новое значение (определим их глобально):

class Integer

{

private:

int value;

public:

Integer(int i): value(i)

{}

friend const Integer operator+(const Integer& left, const Integer& right);

friend Integer& operator+=(Integer& left, const Integer& right);

friend bool operator==(const Integer& left, const Integer& right);

};

 

const Integer operator+(const Integer& left, const Integer& right) {

return Integer(left.value + right.value); }

 

Integer& operator+=(Integer& left, const Integer& right) {

left.value += right.value;

return left; }

 

bool operator==(const Integer& left, const Integer& right) {

return left.value == right.value;}


Дата добавления: 2015-09-03; просмотров: 157 | Нарушение авторских прав


Читайте в этой же книге: Неполный конструктор | Перегрузка операций (операторов). Перегрузка операторов инкремента и декремента. Перегрузка оператора индексирования. Перегрузка оператора вызова функции. | Перегрузка операций (операторов). Перегрузка операторов доступа к членам класса. Перегрузка операторов new и delete. Функции преобразования типа. | Полиморфизм и виртуальные функции. Раннее и позднее связывание. Динамический полиморфизм. Виртуальные функции. Виртуальные и невиртуальные функции. | Полиморфизм и виртуальные функции. Применение динамического полиморфизма. Виртуальные деструкторы. Абстрактные классы и чисто виртуальные функции. | Длина самого длинного слова 10 | Самое длинное слово beautiful | Строковые потоки | Состояние формата (ОТНОСИТСЯ К ПОСЛЕДНЕМУ ВОПРОСУ, КОТОРЫЙ 24) | Работа с несовместимыми конструкциями. |
<== предыдущая страница | следующая страница ==>
Перезагрузка конструкторов| Перегрузка операций (операторов). Перегрузка операторов отношения и логических операторов. Перегрузка оператора присваивания. Перегрузка унарных операторов.

mybiblioteka.su - 2015-2024 год. (0.006 сек.)