15.1.2. Имена перегруженных операторов

15.1.2. Имена перегруженных операторов

Перегружать можно только предопределенные операторы языка C++ (см. табл. 15.1).

Таблица 15.1. Перегружаемые операторы

+-*/%^&|~

!,===++--

==!=&&||+=-=/=

%=^=&=|=*=&==[]()

--*newnew[]deletedelete[]

Проектировщик класса не вправе объявить перегруженным оператор с другим именем. Так, при попытке объявить оператор ** для возведения в степень компилятор выдаст сообщение об ошибке.

Следующие четыре оператора языка C++ не могут быть перегружены:

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

:: .* . ?:

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

// ошибка: нельзя переопределить встроенный оператор сложения int

int operator+( int, int );

Нельзя также определять дополнительные операторы для встроенных типов данных, например добавить к множеству встроенных операций operator+ для сложения двух массивов.

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

Предопределенные приоритеты операторов (см. раздел 4.13) изменить нельзя. Независимо от типа класса и реализации оператора в инструкции

x == y + z;

всегда сначала выполняется operator+, а затем operator==; однако помощью скобок порядок можно изменить.

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

// некорректно: ! - это унарный оператор

bool operator!( const String &s1, const String &s2 )

{

return ( strcmp( s1.c_str(), s2.c_str() ) != 0 );

}

Для встроенных типов четыре предопределенных оператора ("+", "-", "*" и "&") используются либо как унарные, либо как бинарные. В любом из этих качеств они могут быть перегружены.

Для всех перегруженных операторов, за исключением operator(), недопустимы аргументы по умолчанию.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

3.3 Сводка операторов

Из книги C++ автора Хилл Мюррей

3.3 Сводка операторов Операторы С++ систематически и полностью изложены в #с.9, прочитайте, пожалуйста, этот раздел. А здесь приводится краткая сводка и некоторые примеры.Синтаксис оператора – оператор: описание (*список_операторов opt*) выражение optif оператор if ( выражение )


Список операторов

Из книги Блоги. Новая сфера влияния автора Попов Антон Валерьевич

Список операторов «Яндекс» позволяет вести поиск в отдельных элементах страницы или в связанной с ней информации. Обратите внимание на то, что при использовании операторов, в которых как параметр задается имя хоста (таких как url, host и др.), должно указываться главное


Внутреннее представление перегруженных операций

Из книги Язык программирования С# 2005 и платформа .NET 2.0. [3-е издание] автора Троелсен Эндрю

Внутреннее представление перегруженных операций Подобно любому элементу программы C#, перегруженные операции представляются специальными элементами синтаксиса CIL. Откройте, например, компоновочный блок OverloadedOps.exe с помощью ildasm.exe. Как показано на рис. 9.1, перегруженные


Группировка операторов

Из книги Delphi. Учимся на примерах автора Парижский Сергей Михайлович

Группировка операторов Операторы можно группировать, заключая их в круглые скобки.


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

Из книги Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT автора Фролов Александр Вячеславович

Перегрузка операторов Си++ позволяет вам легко вводить новые типы данных. Так, например, вы можете определить класс для работы с комплексными числами или числами в полярной системе координат. Естественно, что удобнее всего проводить вычисления с объектами таких классов


26. Сохраняйте естественную семантику перегруженных операторов

Из книги Стандарты программирования на С++. 101 правило и рекомендация автора Александреску Андрей

26. Сохраняйте естественную семантику перегруженных операторов РезюмеПрограммисты ненавидят сюрпризы. Перегружайте операторы только в случае веских на то оснований, и сохраняйте при этом их естественную семантику. Если это оказывается сложным, возможно, вы неверно


27. Отдавайте предпочтение каноническим формам арифметических операторов и операторов присваивания

Из книги HTML 5, CSS 3 и Web 2.0. Разработка современных Web-сайтов. автора Дронов Владимир

27. Отдавайте предпочтение каноническим формам арифметических операторов и операторов присваивания РезюмеЕсли можно записать а+b, то необходимо, чтобы можно было записать и a+=b. При определении бинарных арифметических операторов одновременно предоставляйте и их


Приоритет операторов

Из книги VBA для чайников автора Каммингс Стив

Приоритет операторов Последний вопрос, который мы здесь разберем, — приоритет операторов. Как мы помним, приоритет влияет на порядок, в котором выполняются операторы в выражении.Пусть имеется следующее выражение:a = b + c — 10;В этом случае сначала к значению переменной b


Приоритет операторов

Из книги C++ для начинающих автора Липпман Стенли

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


9.1. Объявления перегруженных функций

Из книги автора

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


15.1.3. Разработка перегруженных операторов

Из книги автора

15.1.3. Разработка перегруженных операторов Операторы присваивания, взятия адреса и оператор “запятая” имеют предопределенный смысл, если операндами являются объекты типа класса. Но их можно и перегружать. Семантика всех остальных операторов, когда они применяются к