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

Правила перегрузки операторов

Читайте также:
  1. Cпеціальні правила призначення покарання неповнолітнім
  2. II. Основные принципы и правила служебного поведения
  3. II. Требования к бланкам документов и правила их машинописного оформления.
  4. II. Требования к бланкам документов и правила машинописного оформления документов.
  5. II. Этические правила поведения Педагога
  6. IV. ПОРЯДОК И ПРАВИЛА ПРОВЕДЕНИЯ ФЕСТИВАЛЯ
  7. IV. Правила установления контроля души

ЛЕКЦИЯ 8

ПЕРЕГРУЗКА ОПЕРАТОРОВ________________________________________________________ 1

Понятие перегрузки операторов______________________________________________________________ 1

Правила перегрузки операторов______________________________________________________________ 1

Перегрузка унарных операторов _____________________________________________________________ 2

Перегрузка оператора присваивания__________________________________________________________ 4

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

Перегрузка операторов Х =___________________________________________________________________ 7

Перегрузка бинарных операторов, использующих объекты двух классов__________________________ 8

Перегрузка операторов инкремента и декремента_______________________________________________ 9

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

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

Функции преобразования типа_______________________________________________________________ 13

ПЕРЕГРУЗКА ОПЕРАТОРОВ

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

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


Перегружаемые бинарные операторы:


Другие перегружаемые операторы:


Неперегружаемые операторы:

Перегружаемые унарные операторы:

Необходимо отметить что, существуют две версии унарных операторов инкремента и декремента: префиксная и постфиксная.

Например, чтобы перегрузить оператор сложения, нужно определить функцию с именем operator+, а чтобы перегрузить оператор сложения с присваиванием, нужно определить функцию operator+=. Обычно компилятор вызывает эти функции неявно, когда перегруженные операторы встречаются в коде програм­мы. Тем не менее, их можно вызывать и непосредственно. Например: Dot А ('А'), В (’В'), С (’С’); // вызов конструктора

С = А + В; // неявный вызов перегруженного оператора сложения

С = A.operator + (В); // явный вызов перегруженного оператора сложения

Правила перегрузки операторов

Операторная функция перегруженного оператора, за исключением new и delete, должна быть:

> либо нестатической функцией-членом класса;

> либо принимать аргумент типа класса;

> либо принимать аргумент перечислимого типа;

> либо принимать аргумент, который является ссылкой на тип класса;

> либо принимать аргумент, который является ссылкой на перечислимый тип. Кроме того, при перегрузке операторной функции выполняются следующие правила:

> операторная функция не может изменять число аргументов перегружаемого оператора;

> операторная функция не может изменять приоритет перегружаемого оператора;

> операторная функция не может иметь параметров по умолчанию;

> операторные функции =, (), [ ] и -> должны быть нестатическими функциями-членами класса. Операторная функция может быть объявлена как функция-член класса. В этом случае должны быть

выполнены следующие правила:



Объектно-ориентированное программирование


Лекция 8 Перегрузка операторов 2

> операторная функция унарного оператора не должна иметь параметров;

> операторная функция бинарного оператора должна иметь один параметр;

> операторная функция класса наследуются его производными классами (за исключением оператор­ной функции оператора присваивания).

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

> операторная функция унарного оператора должна иметь один параметр;

> операторная функция бинарного оператора должна иметь два параметра.

> операторная функция не наследуются его производными классами (как и любая дружественная функции).

Правила для операторов new и delete будут рассмотрены отдельно.

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


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



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