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

Основные принципы перегрузки операций

Базовые и производные классы. | Struct card | Int data; | Динамическое распределение памяти | Free(newPtr); | Очереди | Алгоритм как абстрактная машина | Сопоставление алгоритмических моделей | Формы рекурсивных процедур. | Пример рекурс алгоритмаЗадача о Ханойских башнях. |


Читайте также:
  1. I. Определение символизма и его основные черты
  2. I. ОСНОВНЫЕ ЗАДАЧИ ВНЕШНЕЙ ПОЛИТИКИ
  3. I. Основные принципы
  4. I.I.5. Эволюция и проблемы развития мировой валютно-финансовой системы. Возникновение, становление, основные этапы и закономерности развития.
  5. III. Для философии необходима наука, определяющая возможность, принципы и объем всех априорных знаний
  6. III. Для философии необходима наука, определяющая возможность, принципы и объемвсех априорных знаний
  7. III. Основные права и обязанности Обучающихся

Ранее мы познакомились с классами С++ и с абстрактными типами данных (ADT). Операции с объектами класса (т.е. представителями ADT) осуществлялись посредством посылки сообщений объектам (в форме вы­зова функций-элементов). Нотация такого вызова функции становится гро­моздкой для определенных категорий классов, в особенности для математиче­ских. Чтобы оперировать с объектами таких классов, было бы удобно исполь­зовать широкий набор встроенных операций С++. В этой лекции мы пока­жем, как разрешить операциям С++ работать с объектами класса. Этот про­цесс называется перегрузкой операций и является прямым и естественным пу­тем к расширению С++ за счет этих новых возможностей.

Операция << в С++ может иметь различный смысл и используется в каче­стве операции передачи в поток и операции сдвига влево. Это пример перегру­женной операции. Операция >> также перегружена, поскольку она использу­ется как операция извлечения из потока и как операция правого сдвига. Обе эти операции перегружаются в библиотеке классов С++. Сам по себе С++ уже перегружает операции + и -. Эти операции выполняют различные функции, которые зависят от контекста применения - в целочисленной арифметике, арифметике чисел с плавающей точкой и арифметике указателей.

В целом С++ дает программисту возможность перегружать большинство операций, так чтобы они были чувствительны к контексту, в котором приме­няются. Компилятор генерирует соответствующий программный код, исходя из способа применения данной операции. Некоторые операции перегружаются достаточно часто, особенно операции присваивания и различные арифметиче­ские операции, такие как + и -. Программист также может использовать операции с типами, определен­ными пользователем. Несмотря на то, что С++ не позволяет создавать новые операции, он позволяет перегружать существующие операции и, когда они применяются к объектам класса, операции приобретают смысл, соответствую­щий новым типам. Это очень сильная сторона С++.

Несмотря на то, что перегрузка операций может восприниматься как не­кая экзотическая возможность, большинство программистов неявно использу­ют перегруженные операции. Например, операция плюс (+) работает сущест­венно различным образом с целыми, числами с плавающей точкой и числами с двойной точностью. Но плюс, тем не менее, прекрасно работает с переменны­ми типа int, float и double,а также с числами других встроенных типов, по­скольку операция плюс (+) перегружена уже в самом языке С++.

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

Чтобы использовать операцию с объектами класса, эта операция должна быть перегружена, но здесь есть два исключения. Операция присваивания (=) может использоваться с любым классом без перегрузки. Поведение по умолча­нию операции присваивания (в тех случаях, когда она не перегружена) обеспе­чивается поэлементным копированием элементов данных класса. Такая поэлементная копия, создаваемая по умолчанию, представ­ляет опасность для классов, элементы которых ссылаются на динамически вы­деляемые области памяти; для таких классов мы, как правило, будем перегру­жать операцию присваивания. Операция адреса (&) также может использовать­ся с объектами любого класса без перегрузки; эта операция просто возвращает адрес объекта в памяти. Операция адреса может быть также перегружена.

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


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


<== предыдущая страница | следующая страница ==>
Описать класс, реализующий стек.| Запреты на перегрузку операций

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